Gitlab CI

CI

Posted by ZJQ on August 10, 2020

GitLab CI/CD流程

Gitlab CI/CD 是一款用于持续集成(CI),持续交付(CD)的工具。 持续集成,即Continuous Integration, 即在源代码变更后(git push)后自动检测(code lint)、构建和进行单元测试的过程,持续集成的目标是快速确保开发人员新提交的代码是好的(少bug),并且适合在代码库中进一步使用。

CI需要一个.gitlab-ci.yml在库中以及一个Runner,每次push/commit都会触发CI流程,默认进行以下三个状态的流程:build,test,deploy。所以要开启CI流程,需要下面两个必须条件:

  1. 在代码库的根文件夹下添加.gitlab-ci.yml文件
  2. 配置一个或多个Runner

.gitlab-ci.yml的作用

这个配置文件说明CI流程如何对项目进行操作,就是一些自动化脚本代码。每次更新代码库,GitLab就会查找这个配置文件并在Runner开启相关jobs。下面为CI流程的两个重要概念:

  1. stage:阶段表明整个CI流程由几个大的阶段组成,每个阶段依次先后执行,只有前阶段成功后阶段才会继续执行。默认会有build,test和deploy阶段,也可以自定义
  2. job:job从属于某个阶段,一个阶段可以由多个job组成,每个job可以并行执行相互不依赖,可以配置多个runner进行job的并行执行

下面是示例配置文件的基本结构以及说明:

stages:
  - build
  - test
  - package

variables:
    WORK_DIR: "/home/dumbo"

build_project:
  stage: build
  only:
    - tags
    - web
  script:
    - echo "Start building project $CI_COMMIT_REF_NAME"
    - ......
  after_script:
    - echo "Build done"
  tags:
    - dumbo
    - builder

main_test:
  stage: test
  only:
    - tags
    - web
  script:
    - echo "Start main tests on $CI_COMMIT_REF_NAME"
    - ......
  after_script:
    - echo "main tests done"
  tags:
    - dumbo
    - tester

other_test:
  stage: test
  only:
    - tags
    - web
  script:
    - echo "Start other MTR tests on $CI_COMMIT_REF_NAME"
    - ......
  after_script:
    - echo "other tests done"
  tags:
    - dumbo
    - tester

make_deb_package:
  stage: package
  only:
    - tags
    - web
  script:
    - echo "Start making deb packages"
    - ......
  after_script:
    - echo "Making deb packages done"
  tags:
    - dumbo
    - packager

上述配置文件中关键字说明:

  1. stages:定义整个CI流程的构建截断,如上所示就有build,test和package阶段
  2. variables:定义CI流程使用的变量
  3. job:build_project,main_test,other_test以及make_deb_package都属于job的名字
    1. 其中stage表明其属于哪个阶段
    2. only:表示这个job只会在哪种情况下执行,tags表示只对带tag的git提交自动进行执行job。web表示可以在gitlab网页上手动启动CI的流程
    3. script:job执行的命令
    4. after_script:script执行后要执行的命令
    5. tags:job的tag,只有相应带有这些tag的runner才会执行这个job,可以控制job在哪些runner上执行

其他详细设置和编写参考官方文档

安装配置Runner

安装步骤:

  1. curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh sudo bash
  2. sudo apt-get install gitlab-runner
  3. sudo gitlab-runner uninstall
  4. sudo gitlab-runner install
  5. sudo gitlab-runner install –user=dumbo –working-directory=/home/gitlab-runner –config=/home/dumbo/.gitlab-runner/config.toml
  6. 修改/home/gitlab-runner文件夹的权限为dumbo

遇到gitlab-runner无法操作文件的问题,一般是用户权限的问题,修改文件权限即可。上述流程也可以以默认root进行安装,则默认用户为gitlab-runner

注册的时候用sudo gitlab-runner register,url以及token的设置使用项目gitlab setting->CI/CD->Runners->Set up a specific Runner manually中的配置。使用runner遇到runner无法操作文件以及注册了却无法连接上等问题,一般是权限限制导致,可以参考这里进行解决。

详情可参考官方文档以及相关博客

执行CI流程

配置好配置文件和runner后,假设由only和except标志在yml中,表明job只会在这些字段中定义的时间触发自动执行。比如打上了only: tags的标志后,就会只在有带tag的git提交时才会自动执行,其他提交不会自动执行。也可以打上only: web标志,表明可以手动在gitlab网页上进行CI的执行,执行按钮在CI/CD->Pipelines->Run Pipeline