筆者在《Jenkins 在聲明式 pipeline 中並行執行任務》一文中介紹瞭如何在聲明式 pipeline 中執行並行的任務。前一段時間,Jenkins 發佈了 1.3 版的聲明式 pipeline(declarative pipeline),這個版本繼續加強了並行執行任務的能力:並行執行的任務能夠是個任務流。官方稱這一功能爲 "sequential stages",本文將解釋 "sequential stages",並經過 demo 演示其用法。html
就是筆者在《Jenkins 在聲明式 pipeline 中並行執行任務》一文中介紹的方式,咱們在一個 stage 中設置多個子 stage 並行執行:linux
stages { stage('Stage1') { ... } stage('並行執行的 Stage') { parallel { stage('Stage2.1') { agent { label "test1" } steps { echo "在 agent test1 上執行的並行任務 1." } } stage('Stage2.2') { agent { label "test2" } steps { echo "在 agent test2 上執行的並行任務 2." } } } } stage('Stage3') { ... } }
上面代碼中任務的執行過程以下圖所示:windows
任務 2.1 和任務 2.2 並行執行。ui
過去並行執行的任務都是單個的,但實際狀況中咱們還須要任務流級別的並行能力,以下圖所示:spa
上圖中顯示有兩條任務流在並行的執行,咱們能夠經過下面的代碼來實現:插件
pipeline { agent none stages { stage('Stage1') { agent { label "master" } steps { timestamps { echo '這是第一個被執行的 stage.' sleep 5 } } } stage("build, deploy and test on Windows and Linux") { parallel { stage("windows") { agent { label "master" } stages { stage("build") { steps { timestamps { echo "build on windows." } } } stage("deploy") { steps { timestamps { echo "deploy on windows." } } } stage("test") { steps { timestamps { echo "test on windows." sleep 5 } } } } } stage("linux") { agent { label "worker1" } stages { stage("build") { steps { timestamps { echo "build on linux." } } } stage("deploy") { steps { timestamps { echo "deploy on linux." } } } stage("test") { steps { timestamps { echo "test on linux." sleep 5 } } } } } } } stage('Stage3') { agent { label "worker1" } steps { timestamps { echo '這是最後一個被執行的 stage.' } } } } }
爲了顯示任務的執行時間,筆者使用了 timestamper 插件。下圖顯示了筆者精簡後的運行日誌:日誌
紅框中的內容說明咱們的兩個任務流是徹底並行執行的。這就是 1.3 版的聲明式 pipeline 中增長的 "sequential stages" 功能。code
現在 jenkins 對聲明式 pipeline 中並行任務的執行支持的很是給力(雖然經歷了一個稍顯漫長的過程)。筆者在 2017 年初調研時發現聲明式 pipeline 沒法支持並行的任務,後來開始支持比較初級的並行任務,筆者在《Jenkins 在聲明式 pipeline 中並行執行任務》一文中進行了介紹。到今年(2018) 7 月份聲明式 pipeline 發佈了版本 1.3,這個版本中開始支持本文介紹的任務流級別的並行。至此筆者認爲 jenkins 聲明式 pipeline 中任務的並行執行功能已經比較完善了。htm
參考:
Sequential Stages (declarative pipeline 1.3 的新功能)blog