Jenkins pipeline 並行執行任務流

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/

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

發佈了8 篇原創文章 · 獲贊 20 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章