jenkins中使用gerrite trigger插件完成代码提交后自动触发jenkins pipline
工作中经常因为代码提交之前没有进行必要的smoke test,导致有问题的代码merge进主分支,从而影响到其他同事的工作和整体工作效率。为了解决这个问题,在gerrit中submit代码之前,必须运行smoke test。思路就是:让gerrit触发jenkins的pipline自动运行,去编译代码和运行smoke test,并且返回结果到gerrit中,如果成功就merge代码。工具Jenki
工作中经常因为代码提交之前没有进行必要的smoke test,导致有问题的代码merge进主分支,从而影响到其他同事的工作和整体工作效率。为了解决这个问题,在gerrit中submit代码之前,必须运行smoke test。思路就是:让gerrit触发jenkins的pipline自动运行,去编译代码和运行smoke test,并且返回结果到gerrit中,如果成功就merge代码。
工具
- Jenkins 2.263.3 (安装必要插件,包括Gerrit Trigger)
- Gerrite 3.2.7
语言
jenkinsfile,Groovy,shell
Jenkins界面配置
安装了Gerrit Trigger后,在Jenkins的configure中可见如下界面,Choose a Server填上自己所用gerrit的网址,Trigger on添加需要的触发条件,比如下图中选择了code review +2的时候触发jenkins pipline。
下图中需要添加能够触发的Gerrit Project的代码模块,代码分支。
代码示例
和上面界面配置的对应的jenkins file代码如下。请注意code review +2这个条件在代码中的书写格式,我刚开始的时候也是尝试了很多次,都写的格式不对,后来干脆看了gerrit trigger的源码。大家如果用其他的触发条件,遇到问题也可以下载插件源码学习下。
triggers {
gerrit(
serverName: 'gerrite1.xxxxxxx.com',
silentMode: true,
gerritProjects: [[compareType:'PLAIN', pattern:'component', branches:[[compareType:'PLAIN', pattern:'master']]]],
triggerOnEvents: [
commentAdded(commentAddedTriggerApprovalValue: '+2', verdictCategory: 'Code-Review')
],
skipVote: [
onSuccessful: true,
onFailed : true,
onUnstable : true,
onNotBuilt : true
]
)
}
设计逻辑
gerrit中的每个code review都有唯一的change number,被触发后这个值保存到jenkins全局变量GERRIT_CHANGE_NUMBER中,另外,考虑到gerrit中code review的时候,如果一个项目包含多个代码模块的同时修改,并且这些模块是有依赖关系的,那就要用到Topic设置,jenkins中全局变量是GERRIT_TOPIC。
总结
Jenkinsfile中使用的代码是groovy的代码语法,当然其中会嵌套shell脚本,当然shell脚本中就可以调用python文件,用Python文件的目的主要是因为Python方便我们抓取网页信息和处理。
更多推荐
所有评论(0)