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:

 打完tag自动触发CICD

合并uat分支到master并打tag

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

手动触发Job:

查看结果:

 

应急回退方案:

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

题外话:

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

git clone https://oauth2:glpat-ea17B4_1Fp3dbKh4y-wd@code.tuyoo.com/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

要使用Gitlab进行CI/CD(持续集成/持续部署)的教程(使用Docker版),可以按照以下步骤进行操作: 1. 首先,安装并运行Gitlab Runner。可以使用以下命令一键安装并运行Gitlab Runner容器: ``` docker run -d --name gitlab-runner --restart always \ -v /home/gitlab-runner/config:/etc/gitlab-runner \ -v /var/run/docker.sock:/var/run/docker.sock \ gitlab/gitlab-runner:latest ``` 这个命令会在后台运行一个Gitlab Runner容器,并将配置文件挂载到本地目录,同时也将Docker套接字挂载到容器中。 2. 接下来,安装并运行Gitlab服务器。可以使用以下命令一键安装并运行Gitlab CE(社区版)容器: ``` docker run --detach \ --hostname localhost \ --publish 443:443 --publish 80:80 --publish 222:22 \ --name gitlab \ --restart always \ --volume /home/gitlab/config:/etc/gitlab \ --volume /home/gitlab/logs:/var/log/gitlab \ --volume /home/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest ``` 这个命令会在后台运行一个Gitlab CE容器,并将配置文件、日志和数据目录挂载到本地文件夹中。 3. 在Gitlab服务器上注册Gitlab Runner。可以使用以下命令运行注册命令: ``` docker run --rm -v /home/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register \ --non-interactive \ --executor "docker" \ --docker-image alpine:latest \ --url "http://localhost/" \ --registration-token "xxxxxx" \ --description "runner" \ --tag-list "build" \ --run-untagged="true" \ --locked="false" \ --access-level="not_protected" ``` 这个命令会在Gitlab Runner容器中执行注册命令,并将配置文件挂载到本地目录。 通过以上步骤,你就可以搭建一个基于DockerGitlab CI/CD环境,并使用Gitlab Runner执行CI/CD任务。在此基础上,你可以根据具体需求进行配置和扩展。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值