CICD+Gerrit 流程
Jenkins提供了两种插件与Gerrit做集成,gerrit-trigger 和 gerrit-code-review
- https://plugins.jenkins.io/gerrit-trigger/
- https://plugins.jenkins.io/gerrit-code-review/
两种插件对比:
Gerrit-code-review
Gerrit trigger
对应Jenkins job类型
多分支流水线(Multibranch_pipeline)
流水线(Pipeline)
适用场景
单仓库代码编译
多仓库代码编译
触发机制
Jenkins 遍历gerrit changes
Gerrit 主动触发 Jenkins job,触发条件配置在jenkins
配置方式
每个仓库独立创建一个Jenkins job
创建一个Jenkins job,多个仓库可以共同触发
优点
插件自动下载代码、patch ,pipeline只需要写编译步骤,流程较简单
支持多仓库、多分支同时触发、支持根据代码路径触发
Gerrit-code-review 多分支流水线
Pre build
-
每个repo独立创建多分支流水线
-
每个仓库的提交触发对应的多分支流水线,多分支流水线会创建以 change_name 命名的Pre build Job
-
根据分支获取对应manifest.xml下载代码。如本次提交分支是master,那么会使用manifest仓库中master分支的manifest.xml来同步代码
-
编译时将判断本次提交patch 的仓库是否在manifest.xml内,不在则退出编译,在则开始更新代码并开始编译。
-
编译成功后在gerrit patch上自动 verified +1
-
Patch submit后,以 change_name 命名的pre build编译记录会被清除。
Post build
- 多分支流水线会自动查找代码仓库所有分支中是否存在 Jenkinsfile,如果存在,会创建一个以分支命名的Job
- 在代码submit 提交进代码库之后,会触发编译对应分支的编译
- Post build Jenkinsfile 内配置需要编译的manifest.xml下载信息
- 编译时将判断本次提交patch 的仓库和分支是否在manifest.xml内,不在则退出编译,在则开始更新代码并开始编译。
gerrit-trigger 流水线
Pre build
-
多个仓库可以触发一个流水线
-
触发条件可以设置为某个分支、代码的某个路径等
-
匹配条件后,触发Pre build
-
Pre build Jenkinsfile 内配置manifest仓库和manifest.xml名
-
manifest仓库存放不同分支对应的jenkinsfile,master.jenkinsfile、develop。jenkinsfile等。pre build被触发后主流程根据分支名获取对应的${branch_name}.jenkinsfile(子流程)下载代码、patch进行编译
-
多个仓库、多个分支可以只使用一个Jenkins job
Post build
- 跟流水线pre build可以共用一个Job,通过添加 Change Merged条件实现 代码入库之后自动触发编译
- 通过判断 GERRIT_EVENT_TYPE=change-merged 区分Pre build和post build。
Release_build(Tag build)
Tag build需要创建一个Pipeline类型的 Jenkins job,手动触发。不依赖于 Gerrit-code-review、Gerrit trigger 两种插件。
-
触发方式:手动触发
-
适用场景:需要编译、上传正式版本 并且编译成功后代码需要打tag
-
手动触发填写参数
MANIFEST_PROJECT:存放manifest.xml的代码仓库名
MANIFEST_BRANCH:manifest.xml 的分支名
MANIFEST_XML:manifest的命名,例如:manifest.xml 、default.xml
TAG_NAME: TAG名
TAG_ANNOTATION:TAG的描述信息
TAG_THE_BUILD:是否需要在代码仓库打TAG.不勾选不会回写TAG
-
编译流程