用Jira webhook和Jenkins创建自动审批工作流

由于工作的原因,需要写一个自动审批的工作流,看了下网上的分享,资料不多;经过几天的踩坑,决定写这篇分享,不对之处欢迎指正

1. Jira创建一个工作流

首先创建一个工作流

2. Jenkins上安装插件 JIRA Trigger Plugin

2.1 安装plugin

Manage Jenkins -> Manage Plugin -> JIRA Trigger Plugin


JIRA Trigger Plugin

2.2 Jenkins配置Jira相关参数

Manage Jenkins -> Configure System -> JIRA Trigger Configuration


JIRA Trigger Configuration

3. Jira创建一个webhook

完成前面两部之后,开始创建webhook
Jira -> 系统 -> 高级 -> webhook 点击右上角创建webhook


image.png
新建webhook
  1. 名称:随便填写即可
  2. URL:{Jenkins的域名}/jira-trigger-webhook-receiver/
  3. 事件:这个字段的意义就是,在Jira上发生这个事件的时候,调起webhook,发起一个POST请求;这个地方填写的是JQL,也就是Jira的一个搜索语句,假如你只要某个项目的issue状态发生了变化,可以参照如图所示,在事件那栏写
project = 项目名称

保存之后,在浏览器输入刚刚webhook的URL,回车后如果提示这是一个POST请求


image.png

则表示webhook设置成功了!

4. Jenkins新建一个Job

总结一下webhook的工作原理:

  1. 在Jira上进行操作,触发了刚刚在webhook中设置好的事件,此时Jira服务器会调webhook的URL进行POST请求
  2. 此时请求会发到Jenkins,那么要如何触发job的执行呢,这就需要我们新建一个job来接收这个POST请求了

4.1 创建pipline job

也就是创建流水线的job,随便命名后,看到Build Triggers


Build Triggers
  1. 假如你只是想校验issue状态的变化,勾选Build when an issue is updated in JIRA ;如果你想校验的是issue评论发生的变化,勾选Build when a comment is added to JIRA(如果没有这个选项那一定是没有安装Jenkins的插件了,看前文)
    这里网上的说明也很多,不多说
  2. JQL filter 这个字段是当webhook的请求发来,会校验请求相关参数是否符合要求,可以和webhook填写的一致,也可以再加上更严格的筛选
  3. Changelog matcher:选择Add Changelog matcher,然后选择Jira Field Matcher;这个字段是校验webhook发来请求中的issue,是否是由某个状态(Old value)变为了某个状态(New value)
    这个状态的值需要从Jira获取(就是工作流每个阶段的名称啦)
  4. 保存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中使用参数

你可能感兴趣的:(用Jira webhook和Jenkins创建自动审批工作流)