Jenkins pipeline 並行執行任務流
筆者在《Jenkins 在聲明式 pipeline 中並行執行任務》一文中介紹瞭如何在聲明式 pipeline 中執行並行的任務。前一段時間,Jenkins 發佈了 1.3 版的聲明式 pipeline(declarative pipeline),這個版本繼續增強了並行執行任務的能力:並行執行的任務可以是個任務流。官方稱這一功能爲 "sequential stages",本文將解釋 "sequential stages",並通過 demo 演示其用法。
之前的任務並行方式
就是筆者在《Jenkins 在聲明式 pipeline 中並行執行任務》一文中介紹的方式,我們在一個 stage 中設置多個子 stage 並行執行:
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') { ... } }
上面代碼中任務的執行過程如下圖所示:
任務 2.1 和任務 2.2 並行執行。
並行執行任務流
過去並行執行的任務都是單個的,但實際情況中我們還需要任務流級別的並行能力,如下圖所示:
上圖中顯示有兩條任務流在並行的執行,我們可以通過下面的代碼來實現:
按 Ctrl+C 複製代碼
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.'
}
}
}
}
}
按 Ctrl+C 複製代碼
爲了顯示任務的執行時間,筆者使用了 timestamper 插件。下圖顯示了筆者精簡後的運行日誌:
紅框中的內容說明我們的兩個任務流是完全並行執行的。這就是 1.3 版的聲明式 pipeline 中增加的 "sequential stages" 功能。
總結
如今 jenkins 對聲明式 pipeline 中並行任務的執行支持的非常給力(雖然經歷了一個稍顯漫長的過程)。筆者在 2017 年初調研時發現聲明式 pipeline 無法支持並行的任務,後來開始支持比較初級的並行任務,筆者在《Jenkins 在聲明式 pipeline 中並行執行任務》一文中進行了介紹。到今年(2018) 7 月份聲明式 pipeline 發佈了版本 1.3,這個版本中開始支持本文介紹的任務流級別的並行。至此筆者認爲 jenkins 聲明式 pipeline 中任務的並行執行功能已經比較完善了。
參考:
Sequential Stages (declarative pipeline 1.3 的新功能)
作者:sparkdev
出處:http://www.cnblogs.com/sparkdev/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。