Gitlab CICD进阶教程

最近有时间搞cicd,查阅各种文档,基于我所在公司的代码管理和发布流程,总结出一套CICD最佳实践。

我们的项目有三个分支:

master:生产分支,生产环境使用的分支

uat:测试分支,测试环境使用的分支

dev:开发分支,人少的话开发人员可直接在此分支上开发,也可基于此分支创建各自的分支,功能开发完合并再到dev分支

我们的工作流:

假如当前版本是1.0.0,即将发布一个新版本1.0.1。

1、开发人员在deb分支上开发,开发完1.0.1的功能后上传各自代码。

2、由负责人确认大家都提交了最新代码,提交MR,将dev分支合并到uat分支。

3、代码review,确认没问题处理MR,合并分支。

4、打tag,基于uat分支打tag,自动触发CICD,将1.0.1版本功能自动部署到测试环境。

5、测试人员测试。

6、有bug,重复1、2、3步骤,删除老tag(runner所在服务器也要删除),重新打1.0.1tag(对版本号要求不是很高的话,可以递增方式增加版本号而不需要删除操作),触发CICD。

7、bug修复,测试也没问题。提交MR,将uat分支合并到master分支。

8、代码review,确认没问题处理MR,合并分支。

9、打tag,基于master分支打tag,自动触发CICD,此时需要手工介入,启动Job。

gitlab-ci.yml

stages:
  - pull(uat)
  - build(uat)
  - restart(uat)
  - pull(prod)
  - restart(prod)

pull(uat):
  stage: pull(uat)
  tags:
    - '192.168.10.21/dev'
  rules: # 仅uat分支打tag时触发,runner会自动识别在哪个分支打的tag,然后拉取对应分支代码
    - if: '$CI_COMMIT_TAG =~ /^uat-[0-9]+\.[0-9]+\.[0-9]+(-build)?$/'
  script:
    - cd /data/itom-project
    - git checkout uat
    - git pull
    - git checkout $CI_COMMIT_TAG
  allow_failure: false

build(uat): #步骤前面加.可以跳过此步骤
   stage: build(uat)
   tags:
     - '192.168.10.21/dev'
   rules:
    - if: '$CI_COMMIT_TAG =~ /^uat-[0-9]+\.[0-9]+\.[0-9]+-build$/'
   script:
     - cd /data/itom-project/docker_files
     - sh ./build.sh
   allow_failure: false

restart(uat):
   stage: restart(uat)
   tags:
     - '192.168.10.21/dev'
   rules:
    - if: '$CI_COMMIT_TAG =~ /^uat-[0-9]+\.[0-9]+\.[0-9]+(-build)?$/'
   script:
     - cd  /data/itom-project
     - docker-compose up -d --force-recreate
   allow_failure: false

pull(prod):
  stage: pull(prod)
  tags:
    - '114.115.152.172/prod'
  rules:
    - if: '$CI_COMMIT_TAG =~ /^prod-[0-9]+\.[0-9]+\.[0-9]+$/'
      when: manual #人工介入部署
  script:
    - cd /data/itom-project
    - git checkout master
    - git pull
    - git checkout $CI_COMMIT_TAG
  allow_failure: false

restart(prod):
   stage: restart(prod)
   tags:
     - '114.115.152.172/prod'
   rules:
     - if: '$CI_COMMIT_TAG =~ /^prod-[0-9]+\.[0-9]+\.[0-9]+$/'
       when: manual #人工介入部署
   script:
     - cd  /data/itom-project
     - docker-compose up -d --force-recreate
   allow_failure: false

关键步骤截图:

uat分支打tag:

Gitlab CICD进阶教程_第1张图片

 打完tag自动触发CICD

Gitlab CICD进阶教程_第2张图片

合并uat分支到master并打tag

Gitlab CICD进阶教程_第3张图片

 打完tag自动触发CICD,因为生产环境设置了人工介入执行Job,这里需要手动触发

Gitlab CICD进阶教程_第4张图片

手动触发Job:

Gitlab CICD进阶教程_第5张图片

查看结果:

Gitlab CICD进阶教程_第6张图片

Gitlab CICD进阶教程_第7张图片 Gitlab CICD进阶教程_第8张图片

应急回退方案:

在Piplines中手动开启一个Pipline,Run for选择上一个版本tag即可。

Gitlab CICD进阶教程_第9张图片

题外话:

gitlab免密克隆,完事就可以无需密码pull、push了:

git clone https://oauth2:[email protected]/ops/itom/itom-cmdb.git

glpat-ea17B4_1Fp3dbKh4y-wd为具体项目的token(Project Access Token)

CI_PROJECT_DIR变量:
runner默认会将仓库clone到CI_PROJECT_DIR目录
variables:
  TF_ROOT: ${CI_PROJECT_DIR}/huaweicloud/all/environments/dev

你可能感兴趣的:(Git,DevOps,git,github,docker)