jenkins中使用gerrite trigger插件完成代码提交后自动触发jenkins pipline

工作中经常因为代码提交之前没有进行必要的smoke test,导致有问题的代码merge进主分支,从而影响到其他同事的工作和整体工作效率。为了解决这个问题,在gerrit中submit代码之前,必须运行smoke test。思路就是:让gerrit触发jenkins的pipline自动运行,去编译代码和运行smoke test,并且返回结果到gerrit中,如果成功就merge代码。

工具

  1. Jenkins 2.263.3 (安装必要插件,包括Gerrit Trigger)
  2. 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方便我们抓取网页信息和处理。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慢跑的平头哥

你的鼓励是我创作的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值