Generic Webhook Trigger 是一款Jenkins插件,下文簡稱GWT,安裝後會暴露出來一個公共API,GWT插件接收到 JSON 或 XML 的 HTTP POST 請求後,根據咱們配置的規則決定觸發哪一個Jenkins項目。node
插件安裝後在Job配置頁面會多出一個"Generic Webhook Trigger"選項 勾選後有不少參數配置,詳細介紹GWT各參數的含義咱們下面會講到web
插件安裝後在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
接着,咱們就看到 pipeline 被觸發!post
GenericTrigger 觸發條件由GWT插件提供。此觸發條件能夠說是GWT的全部內容。 GenericTrigger 觸發條件分爲5部分,這樣更易於理解各參數的做用。測試
genericVariables: [
[
key: 'before',
value: '$.before',
expressionType: 'JSONPath',
regularFilter: '',
defaultValue: ''
],
[key: 'ref', value: '$.ref']
],
複製代碼
string.replaceAll(regexpFilter,"")
;。string是從HTTP請求中提取出來的值。genericRequestVariables: [
[
key: 'requestWithNumber',
regexpFilter: '[^0-9]',
],
[key: 'requestWithString', regexpFilter: '']
],
複製代碼
• key:提取出的值的新變量名,可用於pipeline其餘步驟。 • regexpFilter:對提取出的值進行過濾。ui
標識惟一性,值可使用項目+時間 當Jenkins接收到 GWT 接口的請求時,會將請求代理給GWT插件處理。GWT插件內部會從Jenkins實例對象中取出全部的參數化Jenkins項目,包括pipeline, 而後進 行遍歷。若是在參數化項目中GenericTrigger配置的token的值與Webhook請求時的token的值 致,則觸發此參數化項目。 若是多個項目的此參數值同樣,都會被觸發。spa
實際上,GWT並不僅是根據 token 值來判斷是否觸發,還能夠根據咱們提取出的值進行判斷。示例以下:插件
GWT 插件提供了三個供日調試打印日誌的參數
修改請求,header頭添加信息,地址添加參數,發現 GWT 返回的結果中已經成功識別了。 至於多了0的參數,緣由未詳。