1. 程式人生 > 其它 >Jenkinsfile_觸發器_配置定時任務

Jenkinsfile_觸發器_配置定時任務

在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.只接受固定分支的觸發請求,語法如下:
    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載入配置,後面指令才會生效。

我們只需要努力,然後剩下的交給時間。