Jenkins2 學習系列9 -- Generic Webhook Trigger 插件詳講

Generic Webhook Trigger 是一款Jenkins插件,下文簡稱GWT,安裝後會暴露出來一個公共API,GWT插件接收到 JSON 或 XML 的 HTTP POST 請求後,根據咱們配置的規則決定觸發哪一個Jenkins項目。node

插件安裝後在Job配置頁面會多出一個"Generic Webhook Trigger"選項 勾選後有不少參數配置,詳細介紹GWT各參數的含義咱們下面會講到web

image.png

插件安裝後在pipeline也可使用GenericTrigger指令完成相同的配置正則表達式

如今,咱們建立一個普通的pipeline項目。代碼以下:express

#!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 請求。bash

image.png

接着,咱們就看到 pipeline 被觸發!post

GenericTrigger 觸發條件由GWT插件提供。此觸發條件能夠說是GWT的全部內容。 GenericTrigger 觸發條件分爲5部分,這樣更易於理解各參數的做用。測試

  • 從 HTTP POST 請求中提取參數值。
  • token, GWT 插件用於標識Jenkins項目的惟一性。
  • 根據清求參數值判斷是否觸發Jenkins項目的抗行。
  • 日誌打印控制。
  • Webhook 響應控制。 一個 HTTP POST 請求能夠從三個維度提取參數,即 POST Body、URL參數和header。 GWT 插件提供了三個參數分別從這三個維度的數據進行提取。
  1. 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請求中提取出來的值。
  1. genericRequestVariables:從URL參數中提取值。
genericRequestVariables: [
    [
       key: 'requestWithNumber', 
       regexpFilter: '[^0-9]',
    ],
    [key: 'requestWithString', regexpFilter: '']
],
複製代碼

• key:提取出的值的新變量名,可用於pipeline其餘步驟。 • regexpFilter:對提取出的值進行過濾。ui

  1. genericHeaderVariables:從HTTP header 中提取值。用法和genericRequestVariables同樣。
token 參數

標識惟一性,值可使用項目+時間 當Jenkins接收到 GWT 接口的請求時,會將請求代理給GWT插件處理。GWT插件內部會從Jenkins實例對象中取出全部的參數化Jenkins項目,包括pipeline, 而後進 行遍歷。若是在參數化項目中GenericTrigger配置的token的值與Webhook請求時的token的值 致,則觸發此參數化項目。 若是多個項目的此參數值同樣,都會被觸發。spa

實際上,GWT並不僅是根據 token 值來判斷是否觸發,還能夠根據咱們提取出的值進行判斷。示例以下:插件

  • regexpFilterText:須要進行匹配的key。例子中,咱們使用從POST body中提取出的refValue變量值。 *regexpFilterExpression:正則表達式。 若是 regexpFilterText 參數的值符合 regexpFilterExpression 參數的正則表達式,則觸發執行。

打印內容

GWT 插件提供了三個供日調試打印日誌的參數

  • Silent response 當爲true,只返回http 200 狀態碼,不返回觸發結果
  • Print post content 將 webhook 請求的內容打印到日誌上
  • Print contributed variables 將 提取後的變量打印到日誌上

測試

修改請求,header頭添加信息,地址添加參數,發現 GWT 返回的結果中已經成功識別了。 至於多了0的參數,緣由未詳。

image.png
相關文章
相關標籤/搜索