Gitlab的CICD实际生产环境应用
Gitlab 和 Jenkins 一样,都是很流行的 CI/CD 工具,当然,本站之前推过国人自产的东西 onedev,那个也相当不错,但是用的人毕竟还是少,这回还是用大家都耳熟能详的东西。 本篇就是 Giblab 在生产环境打包发布的一个全流程。 解释一下上图: 首先有两套Git,一套是程序员的Code仓库,另一套是运维的操作代码,里面是一些yaml啊,一些ansible脚本啊 然后流程就是先取出程序员的Code,build出来jar,然后打成镜像推到仓库,然后再取出运维的代码,进行合并,生成k8s的yaml文件,最后推到 kubernetes 中去,这样整个 GitOPS 的流程就完备了 在 gitlab 中非常简单,就是编辑 .gitlab-ci.yaml 文件 image: docker:19.03.12 variables: DOCKER_DRIVER: overlay2 DOCKER_TLS_CERTDIR: "" MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository" TIMEZONE: "Asia/Shanghai" http_proxy: "" https_proxy: "" no_proxy: "" cache: paths: - .m2/repository/ - target/ stages: - build - push - deploy Build: stage: build image: maven:3.5-jdk-8-alpine before_script: - export COMMIT_TIME=$(TZ=CST-8 date +%F-%H-%M) - echo $COMMIT_TIME - echo "COMMIT_TIME=$COMMIT_TIME" >> build.env script: - ./mvnw package artifacts: reports: dotenv: build.env tags: - yunwei Push: stage: push before_script: - docker info || true - echo "$HARBOR_REGISTRY $HARBOR_USERNAME $HARBOR_PASSWORD" - echo "echo Dingfangwen | docker login 172.18.31.28 -u dingfangwen --password-stdin" - echo -n $HARBOR_PASSWORD | docker login $HARBOR_REGISTRY -u $HARBOR_USERNAME --password-stdin script: - docker pull $HARBOR_REGISTRY_IMAGE:latest || true - > docker build --cache-from $HARBOR_REGISTRY_IMAGE:latest --build-arg http_proxy=$http_proxy --build-arg https_proxy=$https_proxy --build-arg no_proxy=$no_proxy --cache-from HARBOR_REGISTRY_IMAGE:latest --tag $HARBOR_REGISTRY_IMAGE:$COMMIT_TIME --tag $HARBOR_REGISTRY_IMAGE:latest . - docker push $HARBOR_REGISTRY_IMAGE:$COMMIT_TIME - docker push $HARBOR_REGISTRY_IMAGE:latest - docker logout $HARBOR_REGISTRY dependencies: - Build tags: - yunwei Deploy: stage: deploy cache: {} image: cnych/kustomize:v1.0 script: - echo $COMMIT_TIME - git config --global user.email "gitlab@git.k8s.local" - git config --global user.name "GitLab CI/CD" - git clone git://172.18.31.50:30000/test-k8s.git - cd test-k8s/prod - kustomize edit set image $HARBOR_REGISTRY_IMAGE:$COMMIT_TIME - cat kustomization.yaml - git commit -am 'PROD image update' - git push origin master dependencies: - Build tags: - yunwei only: - master when: manual 先不着急看这个文件,再普及一下 gitlab 的运行机制,它是通过 gitlab-runner 来执行cd的过程的。配置gitlab runner其实也是一项非常复杂的工作,里面可以配的东西太多了,不是本篇的范畴。我们这里简单来说,runner就是一个Docker容器。更准确的说,就是Docker in Docker。 ...