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流程,需要下面两个必须条件:
- 在代码库的根文件夹下添加.gitlab-ci.yml文件
- 配置一个或多个Runner
.gitlab-ci.yml的作用
这个配置文件说明CI流程如何对项目进行操作,就是一些自动化脚本代码。每次更新代码库,GitLab就会查找这个配置文件并在Runner开启相关jobs。下面为CI流程的两个重要概念:
- stage:阶段表明整个CI流程由几个大的阶段组成,每个阶段依次先后执行,只有前阶段成功后阶段才会继续执行。默认会有build,test和deploy阶段,也可以自定义
- 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
上述配置文件中关键字说明:
- stages:定义整个CI流程的构建截断,如上所示就有build,test和package阶段
- variables:定义CI流程使用的变量
- job:build_project,main_test,other_test以及make_deb_package都属于job的名字
- 其中stage表明其属于哪个阶段
- only:表示这个job只会在哪种情况下执行,tags表示只对带tag的git提交自动进行执行job。web表示可以在gitlab网页上手动启动CI的流程
- script:job执行的命令
- after_script:script执行后要执行的命令
- tags:job的tag,只有相应带有这些tag的runner才会执行这个job,可以控制job在哪些runner上执行
其他详细设置和编写参考官方文档
安装配置Runner
安装步骤:
-
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh sudo bash - sudo apt-get install gitlab-runner
- sudo gitlab-runner uninstall
- sudo gitlab-runner install
- sudo gitlab-runner install –user=dumbo –working-directory=/home/gitlab-runner –config=/home/dumbo/.gitlab-runner/config.toml
- 修改/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