Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Current »

此插件是针对JIRA以Jenkins的集成,主要是利用Jira的webhooks功能向jenkins发送相就通知,从而来触发jenkins的Job功能。

此插件是jenkins插件,需要安装在jenkins中。

此插件会有一下特性

  • 接受任意http的请求,接收地址是:<JENKINS_URL>/generic-webhook-trigger/invoke
  • 提供参数值
    • 获得通过 JSONPath or XPath 方式Post过来的参数
    • 通过请求参数获得值
    • 从Headers头获得参数值
  • 用这些值作为变量触发生成构建


只有当提供的正则表达式与提取的变量匹配时,才有触发作业的可选功能。下面是一个示例,假设内容如下所示:

{
  "before": "1848f1236ae15769e6b31e9c4477d8150b018453",
  "after": "5cab18338eaa83240ab86c7b775a9b27b51ef11d",
  "ref": "refs/heads/develop"
}

然后可以有一个变量,从post内容解析,名为ref,类型为JSONPath,表达式类似于$.ref。

可选的筛选文本可以设置为$ref,筛选regexp设置为^(refs/heads/develop | refs/heads/feature/+)$,以便仅为develop和feature分支触发生成。


触发特定的Job

在多个作业中使用该插件时,将具有相同的URL触发器所有作业。如果只想触发某个作业,则可以:

  • 使用token参数可以为不同的作业使用不同的令牌。仅使用令牌意味着只有具有该确切令牌的作业才会对该请求可见。这将提高性能并减少每次调用的响应。
  • 或者,添加一些请求参数(或Head,或post内容)并使用regexp筛选器仅在该参数具有特定值时触发。

Token参数

有一个特殊的token 标记参数。提供时,调用将仅触发具有该确切标记的作业。token 还允许在没有任何其他身份验证凭据的情况下调用。

Token可以根据位置不同有以下格式

The token can be supplied as a:

  • Request parameter:
curl -vs http://localhost:8080/jenkins/generic-webhook-trigger/invoke?token=abc123 2>&1
  • Token header:


curl -vs -H "token: abc123" http://localhost:8080/jenkins/generic-webhook-trigger/invoke 2>&1
  • Authorization header of type Bearer :

curl -vs -H "Authorization: Bearer abc123" http://localhost:8080/jenkins/generic-webhook-trigger/invoke 2>&1


白名单

白名单可以在Jenkins全局配置页面中配置。白名单将阻止任何未在此列表中配置的对插件的请求。主机可以为空,以允许任何静态IP、CIDR或范围,规则可以如下:

  • 1.2.3.4
  • 2.2.3.0/24
  • 3.2.1.1-3.2.1.10
  • 2001:0db8:85a3:0000:0000:8a2e:0370:7334
  • 2002:0db8:85a3:0000:0000:8a2e:0370:7334/127
  • 2001:0db8:85a3:0000:0000:8a2e:0370:7334-2001:0db8:85a3:0000:0000:8a2e:0370:7335

默认值

插件可以配置为默认值。如下所示:

但如果手动执行作业(或重播pipeline),则不会使用此默认值。因为插件根本不会被调用。您可以通过检查“this job is parametized”来解决这个问题,并添加一个与在插件中配置的参数同名的参数,如下所示:

现在,当您手动触发作业、重播pipeline以及使用插件触发作业时,都将使用此默认值!

预构建步骤

如果需要在预构建步骤(如git clone)中解析值,则需要添加与变量同名的参数。





Pipeline

插件安装后在pipeline也可以使用GenericTrigger指令完成相同的配置。

现在,我们创建一个普通的pipeline项目。代码如下

#!groovy

pipeline {
    agent {
        node {
            label 'master'
        }
    }
    
    triggers {
        GenericTrigger(
            genericVariables: [
              [key: 'ref', value: '$. ref']
            ],
            token: 'secret' ,
            causeString: ' Triggered on $ref' ,
            printContributedVariables: true,
            printPostContent: true
        )
    }
    stages {
        stage('GWT env') {
            steps {
                sh "echo $ref"
                sh "printenv"
            }
        }
    }
}

注意:在创建完成后,需要手动执行一次, 这样pipeline的触发条件オ会生效。

然后我们用postman 发起一次 HTTP POST 请求。

GenericTrigger 触发条件由GWT插件提供。此触发条件可以说是GWT的所有内容。

GenericTrigger 触发条件分为5部分,这样更易于理解各参数的作用


  • 从 HTTP POST 请求中提取参数值。
  • token, GWT 插件用于标识Jenkins项目的唯一性。
  • 根据清求参数值判断是否触发Jenkins项目的抗行。
  • 日志打印控制。
  • Webhook 响应控制。
    一个 HTTP POST 请求可以从三个维度提取参数,即 POST Body、URL参数和header。
    GWT 插件提供了三个参数分别从这三个维度的数据进行提取。


genericVariables: 提取POST body 中的参数

genericVariables: [
    [
       key: 'before', 
       value: '$.before', 
       expressionType: 'JSONPath', 
       regularFilter: '', 
       defaultValue: ''
    ],
    [key: 'ref', value: '$.ref']
],


  • value: JSONPath 或 XPath 表达式,取决于 expressType 参数值,用于从 POST body 中提取值。
  • key: 从 POST Body 中提取出的值的新变量名,可用于pipeline其他步骤。
  • expresssType: 可选, value的表达式类型,默认为JSONPath,当请求为XML内容时,必须指定 XPath 值。
  • defaultValue:可选,当提取不到值,且defaultValue不为空时,则使用defaultValue作为返回值。
  • regexpFilter:可选,过滤表达式,对提取出来的值进行过滤。regexpFilter做的事情其实就是string.replaceAll(regexpFilter,"");。string是从HTTP请求中提取出来的值。


genericRequestVariables:从URL参数中提取值。

genericRequestVariables: [
    [
       key: 'requestWithNumber', 
       regexpFilter: '[^0-9]',
    ],
    [key: 'requestWithString', regexpFilter: '']
],

• key:提取出的值的新变量名,可用于pipeline其他步骤。

• regexpFilter:对提取出的值进行过滤。

genericHeaderVariables:从HTTP header 中提取值。

用法和genericRequestVariables一样。

token 参数

标识唯一性,值可以使用项目+时间
当Jenkins接收到 GWT 接口的请求时,会将请求代理给GWT插件处理。GWT插件内部会从Jenkins实例对象中取出所有的参数化Jenkins项目,包括pipeline, 然后进
行遍历。如果在参数化项目中GenericTrigger配置的token的值与Webhook请求时的token的值
致,则触发此参数化项目。
如果多个项目的此参数值一样,都会被触发。

GWT还可以根据我们提取出的值进行判断。示例如下:

  • regexpFilterText:需要进行匹配的key。例子中,我们使用从POST body中提取出的refValue变量值。
  • *regexpFilterExpression:正则表达式。

如果 regexpFilterText 参数的值符合 regexpFilterExpression 参数的正则表达式,则触发执行

打印内容

GWT 插件提供了三个供日调试打印日志的参数

  • Silent response 当为true,只返回http 200 状态码,不返回触发结果
  • Print post content 将 webhook 请求的内容打印到日志上
  • Print contributed variables 将 提取后的变量打印到日志上













https://github.com/jenkinsci/generic-webhook-trigger-plugin



https://www.jianshu.com/p/7873d2f0dd3e

  • No labels