91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Pipeline腳本式與聲明式語法差異有哪些

發布時間:2021-10-20 16:05:32 來源:億速云 閱讀:253 作者:iii 欄目:web開發

這篇文章主要講解了“Pipeline腳本式與聲明式語法差異有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Pipeline腳本式與聲明式語法差異有哪些”吧!

為什么要有兩種管道類型?

  • 腳本化管道是Jenkins中作為代碼的管道的第一個實現。即使它使用底層的管道子系統,它還是或多或少地設計為使用Groovy構建的通用DSL。這意味著它不具有固定的結構,并且由您決定如何定義管道邏輯。

  • 聲明性管道更自以為是,其結構是明確定義的。可能看起來有些局限。

但實際上,您可以使用腳本化或聲明性管道來實現相同的目的。那么選擇哪一個呢?如果您問我這個問題,我會說使用聲明性管道。以下內容這就是為什么。

1.管道啟動時的代碼驗證

pipeline {     agent any      stages {         stage("Build") {             steps {                 echo "Some code compilation here..."             }         }          stage("Test") {             steps {                 echo "Some tests execution here..."                 echo 1             }         }     } }

如果我們嘗試運行以下管道,則驗證將很快使構建失敗。該日志顯示只能與觸發String參數,所以我們得到這樣的錯誤。

Pipeline腳本式與聲明式語法差異有哪些

請注意,管道沒有執行任何階段,只是失敗了。這可能為我們節省了很多時間-想象一下執行Build階段幾分鐘,而只是獲取echo步驟希望得到的信息java.lang.String而不是java.lang.Integer

現在,讓我們看一下與該示例等效的腳本管道。

node {     stage("Build") {         echo "Some code compilation here..."     }      stage("Test") {         echo "Some tests execution here..."         echo 1     } }

該管道執行相同的階段和相同的步驟。但是,有一個明顯的區別。讓我們執行它,看看它產生什么結果。

Pipeline腳本式與聲明式語法差異有哪些

它按預期失敗。但是這次是執行Build階段,也是Test階段的第一步。如您所見,沒有驗證管道代碼。在這種情況下,聲明式管道可以更好地處理此類用例。

2.從指定步驟重新開始

聲明式管道具有的另一個很酷的功能是“從階段重新啟動”。讓我們修復上一個示例中的管道,看看是否只能重新啟動Test階段。

pipeline {     agent any      stages {         stage("Build") {             steps {                 echo "Some code compilation here..."             }         }          stage("Test") {             steps {                 echo "Some tests execution here..."             }         }     } }

讓我們執行它。

Pipeline腳本式與聲明式語法差異有哪些

在這里您可以看到已選擇測試階段。在右側的步驟列表上方,有一個名為“重新啟動測試”的選項。讓我們單擊它并查看結果。

Pipeline腳本式與聲明式語法差異有哪些

如您所見,Jenkins跳過了Build階段(它使用了先前構建中的工作空間),并從Test階段開始了下一個管道執行。當您執行一些外部測試并且由于遠程環境的某些問題而導致測試失敗時,這可能會很有用。您可以使用測試環境解決問題,然后重新運行該階段,而無需重建所有工件。(在這種情況下,應用程序的代碼未更改。)

現在,讓我們看一下腳本化管道示例。

node {     stage("Build") {         echo "Some code compilation here..."     }      stage("Test") {         echo "Some tests execution here..."     } }

 Pipeline腳本式與聲明式語法差異有哪些

如您所見,沒有重新啟動選項。聲明式管道與腳本式管道-2:0。

3.聲明式管道options塊

兩種管道類型都支持第三個功能,但是我認為聲明性管道更好地處理了它。假設我們將以下功能添加到上一個管道中。

  • 控制臺日志中的時間戳。

  • ANSI顏色輸出。

  • 在1分鐘的超時構建階段,2分鐘超時的測試階段。

聲明式管道如下所示。

pipeline {     agent any      options {         timestamps()         ansiColor("xterm")     }      stages {         stage("Build") {             options {                 timeout(time: 1, unit: "MINUTES")             }             steps {                 sh 'printf "\\e[31mSome code compilation here...\\e[0m\\n"'             }         }          stage("Test") {             options {                 timeout(time: 2, unit: "MINUTES")             }             steps {                 sh 'printf "\\e[31mSome tests execution here...\\e[0m\\n"'             }         }     } }

讓我們運行它。

Pipeline腳本式與聲明式語法差異有哪些

這是控制臺日志。

Started by user Szymon Stepniak Running in Durability level: MAX_SURVIVABILITY [Pipeline] Start of Pipeline [Pipeline] node Running on Jenkins in /home/wololock/.jenkins/workspace/pipeline-sandbox [Pipeline] { [Pipeline] timestamps [Pipeline] { [Pipeline] ansiColor [Pipeline] { [Pipeline] stage [Pipeline] { (Build) [Pipeline] timeout 15:10:04  Timeout set to expire in 1 min 0 sec [Pipeline] { [Pipeline] sh 15:10:04  + printf '\e[31mSome code compilation here...\e[0m\n' 15:10:04  Some code compilation here... [Pipeline] } [Pipeline] // timeout [Pipeline] } [Pipeline] // stage [Pipeline] stage [Pipeline] { (Test) [Pipeline] timeout 15:10:04  Timeout set to expire in 2 min 0 sec [Pipeline] { [Pipeline] sh 15:10:05  + printf '\e[31mSome tests execution here...\e[0m\n' 15:10:05  Some tests execution here... [Pipeline] } [Pipeline] // timeout [Pipeline] } [Pipeline] // stage [Pipeline] } [Pipeline] // ansiColor [Pipeline] } [Pipeline] // timestamps [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS

在聲明性管道中,選項與管道腳本邏輯分開。該腳本管道也支持timestamps,ansiColor和timeout選項,但它需要一個不同的代碼。這是使用腳本化管道表達的相同管道。

node {     timestamps {         ansiColor("xterm") {             stage("Build") {                 timeout(time: 1, unit: "MINUTES") {                     sh 'printf "\\e[31mSome code compilation here...\\e[0m\\n"'                 }             }             stage("Test") {                 timeout(time: 2, unit: "MINUTES") {                     sh 'printf "\\e[31mSome tests execution here...\\e[0m\\n"'                 }             }         }     } }

我想你看到了問題。在這里,我們僅使用timestamps和ansiColorJenkins插件。想象再添加一個或兩個插件。聲明式與腳本式,3:0。

4.用when塊跳過階段。

在此博客文章中我最后要提到的是when聲明性管道支持的塊。讓我們改進前面的示例并添加以下條件:

  • 僅在等于時執行測試階段。env.FOO``bar

這是聲明性管道代碼的外觀。

pipeline {     agent any      options {         timestamps()         ansiColor("xterm")     }      stages {         stage("Build") {             options {                 timeout(time: 1, unit: "MINUTES")             }             steps {                 sh 'printf "\\e[31mSome code compilation here...\\e[0m\\n"'             }         }          stage("Test") {             when {                 environment name: "FOO", value: "bar"             }             options {                 timeout(time: 2, unit: "MINUTES")             }             steps {                 sh 'printf "\\e[31mSome tests execution here...\\e[0m\\n"'             }         }     } }

然后執行它。

Pipeline腳本式與聲明式語法差異有哪些

該測試如預期階段被跳過。現在,讓我們嘗試在腳本化管道示例中執行相同的操作。

node {     timestamps {         ansiColor("xterm") {             stage("Build") {                 timeout(time: 1, unit: "MINUTES") {                     sh 'printf "\\e[31mSome code compilation here...\\e[0m\\n"'                 }             }             if (env.FOO == "bar") {                 stage("Test") {                     timeout(time: 2, unit: "MINUTES") {                         sh 'printf "\\e[31mSome tests execution here...\\e[0m\\n"'                     }                 }             }         }     } }

如您所見,我們必須使用if-condition來檢查是否env.FOO等于bar,然后才添加Test階段。(不幸的是,這并不是真正的跳過。)讓我們運行它,看看結果如何。

Pipeline腳本式與聲明式語法差異有哪些

這是不同的結果。在腳本化管道用例中,甚至不會呈現“  測試”階段。在我看來,這可能會帶來一些不必要的混亂,聲明性管道會更好地處理它。聲明式與腳本式,4:0。

感謝各位的閱讀,以上就是“Pipeline腳本式與聲明式語法差異有哪些”的內容了,經過本文的學習后,相信大家對Pipeline腳本式與聲明式語法差異有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泰和县| 宜州市| 绍兴县| 上思县| 连城县| 罗江县| 丹棱县| 新安县| 库车县| 白银市| 仁怀市| 庆安县| 民勤县| 玉山县| 大港区| 临武县| 青海省| 唐河县| 大方县| 临泉县| 专栏| 新和县| 滁州市| 吴忠市| 巩留县| 静安区| 邵阳市| 新建县| 苏尼特右旗| 休宁县| 容城县| 新闻| 清镇市| 泰顺县| 中宁县| 永城市| 满洲里市| 吴堡县| 阳东县| 灵石县| 黔江区|