我有兩個關于詹金斯的問題
1. 兩種方法有什么區別?
方法一
pipeline {
agent any
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
方法二
node ("jenkins-nodes") {
stage("git clone"){
echo 'Hello World' }
}
- 正如我在第一種方法中所理解的那樣,我可以添加無論作業結果如何都會運行的Post部分。我希望為第二種方法添加相同的帖子部分,但它不起作用。有任何想法嗎?
uj5u.com熱心網友回復:
2種方法有什么區別?
正如Noam Helmer所寫,pipeline{}是宣告式語法,并且node{}是腳本式語法。
一般來說,我建議始終使用pipeline{}它,因為它使常見的任務更容易撰寫,并且使用 Blue Ocean 插件進行可視化最適合宣告式管道。
當宣告性管道變得太不靈活時,您可以使用script{}宣告性管道中的步驟插入腳本塊:
pipeline {
agent any
stages {
stage('Example') {
steps {
script {
echo 'Hello World'
}
}
}
}
}
一種更簡潔的方法是定義一個函式,該函式按定義撰寫腳本并將其用作宣告性管道中的自定義步驟。請注意,即使沒有script{}!
pipeline {
agent any
stages {
stage('Example') {
steps {
myStep 42
}
}
}
}
void myStep( def x ) {
echo "Hello World $x" // prints "Hello World 42"
}
在使用大量自定義代碼的復雜管道中,我通常每個階段都有一個函式。這樣可以保持pipeline{}清潔,并且可以輕松查看管道的整體結構,而不會script{}到處亂糟糟。
正如我在第一種方法中所理解的那樣,我可以添加無論作業結果如何都會運行的 Post 部分。我希望為第二種方法添加相同的帖子部分,但它不起作用。有任何想法嗎?
post{}僅在宣告性管道中可用,但在腳本化管道或宣告性管道的腳本部分中不可用。你可以try{} catch{} finally{}改用。catch{}僅在發生錯誤時運行,finally{}始終運行。您可以同時使用 和 ,也可以使用其中catch{}之一finally{}。
node ("jenkins-nodes") {
stage("git clone"){
echo 'Hello World'
try {
// some steps that may fail
}
catch( Exception e ) {
echo "An error happened: $e"
// Rethrow exception, to let the build fail.
// If you remove "throw", the error would be ignored by Jenkins.
throw
}
finally {
echo "Cleaning up some stuff"
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/476095.html
上一篇:如何在Jenkins的嵌套stage{}塊中執行post{}部分?
下一篇:詹金斯中的環境變數不列印
