提交哪个构建哪个
或者
某个指定分支提交才构建
jenkins自己的restful接口在权限认证上比较麻烦,所以我选择了Jenkins的插件generic-webhook-trigger
使用下来感觉没有选错
在系统配置中去安装插件。
node {
properties([
pipelineTriggers([
[$class: 'GenericTrigger',
genericVariables: [
[key: 'ref', value: '$.ref'],
[
key: 'before',
value: '$.before',
expressionType: 'JSONPath', //Optional, defaults to JSONPath
regexpFilter: '', //Optional, defaults to empty string
defaultValue: '' //Optional, defaults to empty string
]
],
genericRequestVariables: [
[key: 'requestWithNumber', regexpFilter: '[^0-9]'],
[key: 'requestWithString', regexpFilter: '']
],
genericHeaderVariables: [
[key: 'headerWithNumber', regexpFilter: '[^0-9]'],
[key: 'headerWithString', regexpFilter: '']
],
causeString: 'Triggered on $ref',
token: 'abc123',
tokenCredentialId: '',
printContributedVariables: true,
printPostContent: true,
silentResponse: false,
// 这里只更新master
regexpFilterText: '$ref'+'/'+'master',
regexpFilterExpression: 'refs/heads/master/'+ env.BRANCH_NAME
]
])
])
stage("build") {
// other stage
}
}
这里解释一下
// 这里只更新master
regexpFilterText: '$ref'+'/'+'master',
regexpFilterExpression: 'refs/heads/master/'+ env.BRANCH_NAME
$ref 的值为git更新后推送过来的分支,如果是master分支,则会是refs/heads/master,获取到对应值后,会与regexpFilterExpression进行正则比对。如果是每个分支提交对应构建对应的分支可以这么写:
// 这里只更新master
regexpFilterText: '$ref',
regexpFilterExpression: 'refs/heads/'+ env.BRANCH_NAME
如果只在某个分支提交时进行构建,则使用第一种我的写法,当提交分支与当前分支一致都为master才进行构建。
构建之后,就可以尝试用链接调用,验证是否生效
// jenkins地址
http://[xxx.xxx.xxx]//generic-webhook-trigger/invoke?token=abc123
通过浏览器或者postman进行调用,返回结果如下:
{
"jobs": {
"test/master": {
"regexpFilterExpression": "refs/heads/master",
// 这里显示true就是对应分支生效了。
"triggered": true,
"resolvedVariables": {
"before": ""
},
"regexpFilterText": "refs/heads/master",
"id": 5337,
"url": "queue/item/5337/"
}
},
"message": "Triggered jobs."
}

将刚才的地址放在url就可以。尝试提交代码,看是否生效。