由于工作的原因,需要写一个自动审批的工作流,看了下网上的分享,资料不多;经过几天的踩坑,决定写这篇分享,不对之处欢迎指正
1. Jira创建一个工作流
首先创建一个工作流
2. Jenkins上安装插件 JIRA Trigger Plugin
2.1 安装plugin
Manage Jenkins -> Manage Plugin -> JIRA Trigger Plugin
2.2 Jenkins配置Jira相关参数
Manage Jenkins -> Configure System -> JIRA Trigger Configuration
3. Jira创建一个webhook
完成前面两部之后,开始创建webhook
Jira -> 系统 -> 高级 -> webhook 点击右上角创建webhook
- 名称:随便填写即可
- URL:{Jenkins的域名}/jira-trigger-webhook-receiver/
- 事件:这个字段的意义就是,在Jira上发生这个事件的时候,调起webhook,发起一个POST请求;这个地方填写的是JQL,也就是Jira的一个搜索语句,假如你只要某个项目的issue状态发生了变化,可以参照如图所示,在事件那栏写
project = 项目名称
保存之后,在浏览器输入刚刚webhook的URL,回车后如果提示这是一个POST请求
则表示webhook设置成功了!
4. Jenkins新建一个Job
总结一下webhook的工作原理:
- 在Jira上进行操作,触发了刚刚在webhook中设置好的事件,此时Jira服务器会调webhook的URL进行POST请求
- 此时请求会发到Jenkins,那么要如何触发job的执行呢,这就需要我们新建一个job来接收这个POST请求了
4.1 创建pipline job
也就是创建流水线的job,随便命名后,看到Build Triggers
- 假如你只是想校验issue状态的变化,勾选Build when an issue is updated in JIRA ;如果你想校验的是issue评论发生的变化,勾选Build when a comment is added to JIRA(如果没有这个选项那一定是没有安装Jenkins的插件了,看前文)
这里网上的说明也很多,不多说 - JQL filter 这个字段是当webhook的请求发来,会校验请求相关参数是否符合要求,可以和webhook填写的一致,也可以再加上更严格的筛选
- Changelog matcher:选择Add Changelog matcher,然后选择Jira Field Matcher;这个字段是校验webhook发来请求中的issue,是否是由某个状态(Old value)变为了某个状态(New value)
这个状态的值需要从Jira获取(就是工作流每个阶段的名称啦) - 保存job
其实到这里,整个webhook就可以用了,改变某个issue到指定状态,此job应当是会自动构建的,如果没有自动构建,那么要么是URL写错,要么是状态变更的错误,具体问题具体分析了。
5. webHook的传参
前面说到webhook发起的是POST请求,很有意思的一件事请就是参数是如何传的呢?
webhook页面,URL下面写了可以在URL中使用下面的额外变量,我以为只要点击某个变量,加到URL后,即可传递此参数,可是事实是加上参数后URL甚至都不能用了。
不知道是不是我使用的姿势有问题,看了很多网上的分享,我了解到webhook的URL被请求后,实际上是默认会传issue的key过去的,我们选择一个已经构建的job rebuild一次,可以看到确实传了参数issue key
那么其实其他的参数都是没有用的么?
也许是有用的,可能是我引用的参数不对,目前为止,我只发现不传参的时候URL是可以被自动调用的(欢迎指正)
可是这个issue key其实已经足够有用了,你可以通过调jira的api获得你想要的信息,下一篇讲如何在pipline中使用参数