Jenkins触发构建--通用触发接口(上)

2021-06-02 17:51:19 浏览数 (1)

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项目。

代码如下:

  1. pipeline {
  2. agent any
  3. triggers {
  4. GenericTrigger(
  5. genericVariables:[
  6. [key: 'ref', value: '$.ref']
  7. ],
  8. token:'secret',
  9. causeString: 'Triggered on $ref',
  10. printContri butedVariables: true,
  11. printPostContent: true
  12. )
  13. }
  14. stages {
  15. stage('Some step') {
  16. steps {
  17. sh "echo $ref"
  18. sh "printenv"
  19. }
  20. }
  21. }
  22. }

执行一次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被触发执行了。日志如下:

  1. Triggered on refs/heads/master
  2. 省略git操作细节部分
  3. Seen branch in repository origin/dev
  4. Seen branch in repository origin/ master
  5. Seen 2 remote branches
  6. Obtained Jenkinsfile from 6b2c6a36ac5fade7448596a5fc67ee33be4bab95
  7. Running in Durability level: MAX_ SURVIVABILITY
  8. Generi cWebhookEnvironmentContributor
  9. Received :
  10. { "ref": "refs/heads/master" }
  11. Contributing variables:
  12. ref = refs/heads/master

GenericTrigger触发条件由GWT插件提供。此触发条件可以说是GWT的所有内容。将GenericTrigger触发条件分为5部分,这样更易于理解各参数的作用。

  • 从HTTP POST请求中提取参数值
  • token,GWT插件用于标识Jenkins项目的唯一性
  • 根据请求参数值判断是否触发Jenkins项目的执行
  • 日志打印控制
  • Webhook响应控制

提取参数

一个HTTP POST请求可以从三个维度提取参数,即POST body、URL参数和header。

GWT插件提供了三个参数分别对这三个维度的数据进行提取。

  1. genericVariables :提取POST body中的参数
  2. genericVariables:[
  3. [key: 'ref', value: '$.ref'] ,
  4. [key: 'before'
  5. value: ' $.before',
  6. expressionType:' JSONPath
  7. regexpFilter:
  8. defaultValue:
  9. ]
  10. ]
  • 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中提取值的。

0 人点赞