GWT
前文中,我们讲到安装GitLab插件后,GitLab系统就可以发送Webhook触发Jenkins项目的执行。那是不是说其他系统想触发Jenkins项目执行,也需要找一个插件或者开发一个插件来实现呢?
有了Generic Webhook Trigger插件就不需要了,安装Generic Webhook Trigger插件(下文使用GWT简称)后, Jenkins会暴露一个API: <JENKINS URL>/generic-webhook-triggerlinvoke
,即由GWT插件来处理此API的请求。
GWT插件接收到JSON或XML的HTTP POST请求后,根据我们配置的规则决定触发哪个Jenkins项目。下面我们先感受一下,然后再详细介绍GWT各参数的含义,现在我们创建一个普通的pipeline项目。
代码如下:
pipeline {
agent any
triggers {
-
GenericTrigger(
genericVariables:[
-
[key:
'ref', value:
'$.ref']
-
],
token:'secret',
causeString:
'Triggered on $ref',
printContri butedVariables: true,
printPostContent: true
-
)
-
}
stages {
stage('Some step')
{
steps {
sh "echo $ref"
sh "printenv"
-
}
-
}
-
}
}
执行一次job后才会生效,然后发起一次HTTP POST请求
curl -X POST -H "Content-Type: application/json" -d '{ "ref": "refs/heads/master" }' -vs http://192.168.23.11:8667/jenkins/generic-webhook-trigger/invoke?token=secret
接着,我们就看到pipeline被触发执行了。日志如下:
Triggered on refs/heads/master
省略git操作细节部分
Seen branch in repository origin/dev
Seen branch in repository origin/ master
Seen
2 remote branches
Obtained
Jenkinsfile
from
6b2c6a36ac5fade7448596a5fc67ee33be4bab95
Running
in
Durability level: MAX_ SURVIVABILITY
Generi cWebhookEnvironmentContributor
Received
:
{
"ref":
"refs/heads/master"
}
Contributing variables:
ref = refs/heads/master
GenericTrigger触发条件由GWT插件提供。此触发条件可以说是GWT的所有内容。将GenericTrigger触发条件分为5部分,这样更易于理解各参数的作用。
- 从HTTP POST请求中提取参数值
- token,GWT插件用于标识Jenkins项目的唯一性
- 根据请求参数值判断是否触发Jenkins项目的执行
- 日志打印控制
- Webhook响应控制
提取参数
一个HTTP POST请求可以从三个维度提取参数,即POST body、URL参数和header。
GWT插件提供了三个参数分别对这三个维度的数据进行提取。
- genericVariables :提取POST body中的参数
genericVariables:[
-
[key:
'ref', value:
'$.ref']
,
-
[key:
'before'
value:
' $.before',
expressionType:' JSONPath
regexpFilter:
defaultValue:
]
]
- value: JSONPath表 达式,或者XPath 表达式,取决于expressionType参数值,用于从POST body中提取值。
- key :从POST body中提取出的值的新变铭,可用于pipeline其他步骤。
- expressionType :可选, value的表达式类型, 默认为JSONPath。当请求为XML内容时,必须指定XPath值。
- defaultValue:可选,当提取不到值,且defaultValue不为空时,则使用defaultValue作为返回值。
- regexpFilter :可选,过滤表达式,对提取出来的值进行过滤。其实就是string.replaceAll ( regexpFilter ,””);。string是从HTTP请求中提取出来的值。
2.genericRequestVariables :从URL参数中提取值。
- key :提取出的值的新变量名,可用于pipeline其他步骤。
- regexpFilter :对提取出的值进行过滤。
3.genericHeaderVariables :从HTTP header中提取值。 genericHeaderVariables的用法与genericRequestVariables-样,区别是它是从HTTP header中提取值的。