所用的软件版本:
Jenkins 1.545, 1.551
Gerrit 2.8.1
网上能找到的教程多半是针对旧版的Gerrit,而官网新版Gerrit有不少界面和选项都已经不同了,在此特针对新版说一下要点。
Jenkins的安装相对简单,参照官网或网上教程介绍,用apt/yum进行源的配置、下载安装即可。
配置文件: /etc/defaults/jenkins (Ubuntu) 或 /etc/sysconfig/jenkins (CentOS)。主要是修改合适的端口。
Gerrit安装和基本配置比较繁琐,参见:
假定Gerrit安装所在机器名为linuxserver;jenkins在Gerrit中的用户名为jenkins。
要点:建好Gerrit中的jenkins用户后,将其加入组:Non-Interactive Users。(该组默认就已有监听Stream Events权限,所以不需要像其他一些教程那样额外单独建Event Streaming Users组的步骤。Steam Events的原理是:Gerrit收到代码提交后,会以event的形式发给Jenkins,从而触发Jenkins自动构建。)
Jenkins配置如下:
安装及配置Gerrit Trigger
通过Plugin Manager安装Git Plugin和Gerrit Trigger(会自动连带安装SSH Agent Plugin),不需要装其他带Gerrit字样的插件。
进入 Manage Jenkins - Gerrit Trigger,配置参数后Test Connection应能成功,否则请检查unix帐号jenkins的public key是否已正确添加到Gerrit里的对应用户中。
在Gerrit Reporting Values小节,建议将Verify和Code Review中的Successful设为+1,Failed设为-1,这样可以在Jenkins自动构建成功或者失败后向Gerrit直观地反映其结果(见附1)。Verify一节的值在新版Gerrit里应该是用不到了的,参见下一段。
点开Advanced以后,必须将Gerrit Verified Commands小节下各个命令中--message后的单引号改为双引号(否则当Jenkins向Gerrit发ssh gerrit review消息时会出现参数解析出错的问题,见https://code.google.com/p/gerrit/issues/detail?id=800),并去掉--verify参数(应该是这一新版的Gerrit将该参数舍弃了)。
例如Successful的命令:
修改前:gerrit review , --message 'Build Successful ' --verified --code-review
修改后:gerrit review , --message "Build Successful " --code-review
Job设置
新建job(或叫project,1.551里也叫item)后,Source Code Management小节配置如下图:
(1) Repository URL根据实际环境中Gerrit提供的git repo地址填写;
(2) Refspec=$GERRIT_REFSPEC(点开Advanced可见), (3) Branch Specifier=$GERRIT_BRANCH, (4) Additional Behaviors 添加一个Strategy for choosing what to build,选 Gerrit Trigger。这几项需按照图中配置才能获得正确的ref和branch进行编译。关于这些变量的详情,可以在Gerrit事件触发以后通过主菜单的Query and Trigger Gerrit Patches或者job运行记录的Parameter中看到(附3)。
(1) 选中 Gerrit event
(2) Choose a server视情况选择Any Server或具体特定server。
(3) Check non-reviewed patchsets 涉及到Jenkins启动重连后检查尚未review的patchset,视实际需要选择。
(4) Trigger on可以不配,不配的话保存job后会默认自动选中事件 Patchset Created(最关键的就是这个事件,是提交代码后就触发的事件) 和 Draft Published
(4) Trigger on可以不配,不配的话保存job后会默认自动选中事件 Patchset Created(最关键的就是这个事件,是提交代码后就触发的事件) 和 Draft Published
(5) Gerrit Project需填完整 Pattern 和 Branches 内容才有效,例如Type选Plain,值填、Branches的Type选Plain、值填master;或Type选Path,Pattern填**,Branches的Type选Path,Pattern填**匹配任何project和branch,更详细的介绍可点相应问号查看。
(6) 建议选中 Advanced 下的 Do not pass compound 'name and email' parameters ,否则构建时(例如使用maven时)很可能出错。诸如此类Jenkins传参数给Gerrit的问题后续还有多处地方可能出现,如果遇到集成不正常,可用附2的调试方法来排查。
这样配置下来,Jenkins与Gerrit就基本连通了。
验证:
以开发者帐号从Gerrit clone出代码,修改,git commit(记得事先拷贝好.git/hook/commit-msg), git push origin HEAD:refs/for/master,就应该能看到Jenkins收到新的代码、构建、反馈结果给Gerrit,之后其他审查者就可以在这套经过自动化构建验证过的代码上进行人工review了。
附1:展示构建成功或失败后,Gerrit中的显示效果。成功的效果如下:
构建失败:
附2:查看Jenkins和Gerrit调试日志的方法:
Jenkins:
tail -F /var/log/jenkins/jenkins.log & ; ssh jenkins@linuxserver -p 29418 gerrit stream-events
Gerrit:
tail -F /logs/*log
附3:Gerrit触发事件的参数详情示例