Jenkins Job 觸發其他需要參數的 Job

Jenkins 完成專案 Continuous integration - CI build 後只能確保該專案可以通過建置,但系統各個功能是不是可以如預期執行有時是需要多個專案共同搭配的結果

同事遇到的問題就是這個情境:A 專案 job 建置完成後,需要 B job 執行後續動作加上 B job 需要在 build 時提供參數才能正確執行。之前的文章中並沒有紀錄到這種情境,剛好同事問起,順手紀錄一下

基本設定說明

  1. A01-TestDev 是一般 project job

    用來模擬一般 project 的 free-style build job

  2. TestTriggerPipeline 則是 Pipeline job

    用來模擬 project 成功建置後執行 stop iis、deploy、start iis 的動作

    • 有一個名為 jobNames 的 String Parameter 用來接收輸入的參數

      3strigparameter

    • Pipeline 內容

      以下使用簡化內容模擬,如果想多了解 Pipeline job 可以參考 Jenkins 2 如何建立 Pipeline job

      • Definition 使用 Pipeline script
      • script 直接列出 傳入的 jobNames

        println "This job was caused by " + "${jobNames}"

  3. A01-TestDev 成功後接著執行 TestTriggerPipeline

    TestTriggerPipeline 需要參數 - jobNames 來決定該怎麼進行後續步驟

安裝 Plugin - Parameterized Trigger Plugin

Parameterized Trigger Plugin 可以讓我們在觸發其他 job 時傳遞參數

  1. Jenkins 主畫面 Manage Jenkins –> Manage Plugins

    1managejenkins

  2. Available tab –> search Parameterized Trigger Plugin –> 勾選 Parameterized Trigger Plugin –> install

    2install

設定 A01-TestDev Job

  1. Post-build Actions 加上 Trigger parameterized build on other projects

    4addtrigger

  2. 設定 Trigger parameterized build on other projects

    5edittrigger

    • Projects to build

      有自動提示

      6projecthint

    • Trigger when build is

      視情境調整

      7projectstatus

  3. 加上 Parameter

    • 視情境使用 Current build parameters 或是 Predefined parameters

      8addparam

  4. 設定 Parameter

    • 設定目標 job 所需參數的值

      範例是將 jobNames 指定為目前的 job name

      9passjobname

  5. 完整設定

    A01-TestDev Job build success 後使用當前 job name 當做 jobNames 參數直接執行 TestTriggerPipeline

    10postbuildsetting

實際效果

11result

可以看到 build 是由 upstream project A01-TestDev 發動的

心得

原本想透過 groovy 來取得 upstream 資訊,嘗試了好久一直找不到方法,後來透過目前方式不僅設定容易,也少了維護 groovy 的成本,真是不賴

參考資訊

  1. Jenkins - How to get and use upstream info in downstream