GitLab-Runner CI/CD 流程大致架构

2021年4月27日 0 条评论 2.57k 次阅读 0 人点赞

前言

CI/CD (持续集成、持续部署、持续交付) 的概念就不必多说了,来说说公司CI/CD 构建的架构吧。

我司在项目上线前,需要经过 QA 环境、Mirror(生产镜像环境)的测试,最后再部署到线上的正式环境。

开发人员需要不停的提交代码到QA环境上,经由测试人员测试,最后再部署到生产镜像环境,这一系列测试流程我司是使用 GitLab-runner 实现的。

最后部署到生产环境使用的是 Jenkins。

要说起来GitLab-runner到底是个什么,其实也无外乎和Jenkins是一类构建工具,只不过为什么生产环境使用 Jenkins 而测试环境使用 GitLab-runner 构建呢?我司技术主管回答是因为测试环境不用配置的特别复杂,而GitLab-runner就是特别的轻量而已,因此也便使用了它罢了。

简要架构图如下所示

我们每个项目都会拥有这样一个配置文件用于触发构建执行命令

文件: .gitlab-ci.yml

stages:
  - build
  - deploy
  - on_success
  - on_failer

before_script:
  - git version
  - go version
  - go env -w GO111MODULE=on
  - go env -w GOPROXY="https://goproxy.io,direct"

  ## 定义项目全局变量
variables:
  PROJECT_NAME: "xgo"

build:
  before_script:
    - echo "开始对 $PROJECT_NAME 持续集成 build"
    - mailer -c /root/mailer.toml -bodyPath /root/build.html -template {{PROJECT_NAME}}=$PROJECT_NAME,{{STATUS}}=开始构建
  after_script:
    - echo "$PROJECT_NAME 持续集成 build 结束"
    - mailer -c /root/mailer.toml -bodyPath /root/build.html -template {{PROJECT_NAME}}=$PROJECT_NAME,{{STATUS}}=构建结束
  stage: build
  script:
    - go build -o $PROJECT_NAME
  only:
    - master
  artifacts:
    paths:
      - xgo
  tags:
    - server-runner

deploy:
  stage: deploy
  script:
    - echo "开始对 $PROJECT_NAME 进行部署 deploy"
    # 将构建的文件拷贝至生产组
    - ansible product -m copy   -a "src=./$PROJECT_NAME dest=/$PROJECT_NAME owner=root group=root mode=755"
    - ansible product -m shell  -a "supervisorctl restart $PROJECT_NAME"
  only:
    - master
  tags:
    - server-runner


# 当且仅仅由于持续集成失败才触发
on_failer:
  stage: on_failer
  script:
    - echo " $PROJECT_NAME 持续集成失败"
    - mailer -c /root/mailer.toml -bodyPath /root/deploy.html -template {{PROJECT_NAME}}=$PROJECT_NAME,{{STATUS}}=部署失败
  tags:
    - server-runner
  when: on_failure

# 当且仅当成功时会触发
on_success:
  stage: on_success
  script:
    - echo "$PROJECT_NAME 持续集成 成功"
    - mailer -c /root/mailer.toml -bodyPath /root/deploy.html -template {{PROJECT_NAME}}=$PROJECT_NAME,{{STATUS}}=部署成功
  tags:
    - server-runner
  when: on_success

这里特别要介绍一下自动运维工具 ansible

当持续部署流程时,我们需要将构建好的二进制程序发布到多台服务器,, ansible 是一个多服务器同步执行命令的工具。他可以定义好几个服务器组,并通过格式

ansible 服务器组 -m shell  -a "shell 命令"

例如下所示,对所有生产环境组的服务器进行重启服务:

ansible product -m shell  -a "supervisorctl restart $PROJECT_NAME"

定义服务器组也非常方便,他只需要再一个配置文件中定义受控服务器的基本信息即可。

如下所示

总结

我司一套CI/CD使用工具如下

GitLab、GitLab-Runner、ansible、supervisor、Jenkins(没有可以)

相关使用请自行查阅资料

参考文献:

https://www.shuzhiduo.com/A/E35pxvGB5v/

https://www.jianshu.com/p/0b9054b33db3

http://www.topgoer.com/beego%E6%A1%86%E6%9E%B6/%E5%BA%94%E7%94%A8%E9%83%A8%E7%BD%B2/supervisor%E9%83%A8%E7%BD%B2.html

https://www.jianshu.com/p/82b4e9162590

https://ansible-tran.readthedocs.io/en/latest/docs/intro.html

https://ansible-tran.readthedocs.io/en/latest/docs/intro.html

兰陵美酒郁金香

大道至简 Simplicity is the ultimate form of sophistication.

文章评论(0)

你必须 登录 才能发表评论