triggers
在jenkinsfile來定義流水線時,常規情況下,項目都是基於手動點擊部署,這種策略尤其適用於線上環境,但在測試環境,乃至於預發環境,應該對自動構建有更高的集成度,使開發者只關注於開發,而不必過多糾結構建的過程。這里使用triggers
來定義流水線觸發的機制和條件。
目前流水線支持的觸發器有三種:crob、pollSCM和upstream。
-
cron
這里采用和Linux系統一樣的定時任務管理方案,加入一些簡單的參數項,以應對某些需要定期執行的場景。pipeline { agent any triggers { cron('* * * * *') } stages { stage('cron job') { steps { echo 'cron job test' } } } }
這里參數可以參考linux cron來配置。
-
pollSCM
這里表示定期對代碼倉庫進行檢測,如果有變化,則自動觸發構建。pipeline { agent any triggers { pollSCM('* * * * *') } stages { stage('cron job') { steps { echo '每一小時檢測一次倉庫的變化' } } } }
-
upstream
當B項目的執行依賴A項目的執行結果是,A就是B的上游項目,在Jenkins2.22以上的版本中,可以通過upstream關鍵字進行這種關系的表示。triggers { // job1,job2都是任務名稱 upstream(upstreamProjects: 'job1,job2', threshold: hudson.model.Result.SUCCESS) }
hudson.model.Result
是一個枚舉用於指示上游項目狀態,包含以下指令:- ABORTED:任務被手動終止。
- FAILURE:構建失敗。
- SUCCESS:構建成功。
- UNSTABLE:存在一些錯誤,但不至於構建失敗。
- NOT_BUILT:再多階段構建時,前面階段的問題導致后面階段無法執行。
-
gitlab事件觸發
這個場景應用較多,大多時候,我們都默認將項目配置為,開發者提交某些分支,然后自動觸發對應的構建。傳統方式下,需要比較復雜的幾步配置,但是在pipeline中也可以通過代碼形式對這種觸發器進行配置。
注意:gitlab觸發Jenkins的構建需要依賴Gitlab插件,而並不需要插件當中列出來的所謂的gitlab hook。pipeline { agent any triggers{ gitlab( triggerOnPush: true, triggerOnMergeRequest: true, branchFilterType: 'All', secretToken: "xxxxxxxx") } stages { stage('build') { steps { echo '提交代碼觸發構建' } } } }
對於觸發器用到的參數:
- triggerOnPush:當Gitlab觸發push事件時,是否執行構建。
- triggerOnMergeRequest:當Gitlab觸發mergeRequest事件時,是否執行構建。
- branchFilterType:只有符合條件的分支才會觸發構建,必選,否則無法實現觸發。
可選參數如下: - NameBasedFilter:基於分支名進行過濾,多個分支名使用逗號分隔。
- includeBranchesSpec:基於branchFilterType值,輸入期望包括的分支的規則。
- excludeBranchesSpec:基於branchFilterType值,輸入期望排除的分支的規則。
- RegexBasedFilter:基於正則表達式對分支名進行過濾。
- sourceBranchRegex:定義期望的通過正則表達式限制的分支規則。
這里舉幾個示例進行說明:
1.只接受固定分支的觸發請求,語法如下:
- sourceBranchRegex:定義期望的通過正則表達式限制的分支規則。
triggers{ gitlab( triggerOnPush: true, triggerOnMergeRequest: true, branchFilterType: "NameBasedFilter", includeBranchesSpec: "release", secretToken: "${env.git_token}") }
2.通過正則匹配到某些分支觸發
triggers{ gitlab( triggerOnPush: true, triggerOnMergeRequest: true, branchFilterType: "RegexBasedFilter", sourceBranchRegex: "test.*", secretToken: "${env.git_token}") }
注意:所有對於jenkinsfile的配置都需要手動執行一次,將jenkins加載配置,后面指令才會生效。