如何讓以下post部分運行?這個想法是根據myList.
stage("Dynamic stages"){
steps{
stageMap = [:]
script {
for (element in myList) {
stageMap[element] = {
stage("Stage 1 of ${element}"){
echo "Stage 1"
}
stage("Stage 2 ${element}"){
echo "Stage 2"
post{
failure{
echo "Stage 2 failed!"
}
}
}
}
}
}
parallel stageMap
}
}
構建失敗并出現以下錯誤
Also: java.lang.NoSuchMethodError: No such DSL method 'post' found among steps...
然而,詹金斯檔案說這是允許的
果然有一大堆允許的步驟,而 post 不在其中。我是否遺漏了什么或者檔案不清楚這個案例?
uj5u.com熱心網友回復:
post{}僅在宣告性管道中可用,但在宣告性管道的腳本部分中不可用。你可以try{} catch{}改用。
還有另一個錯誤:您element在閉包中使用回圈變數,這不能按預期作業。閉包捕獲element變數,但是當閉包運行時,它的值將始終是回圈的最后一個值。為了解決這個問題,我將回圈變數分配給新的區域變數curElement,這將是每次迭代的新實體,因此它會按預期被捕獲。
stage("Dynamic stages"){
steps{
stageMap = [:]
script {
for (element in myList) {
def curElement = element
stageMap[element] = {
stage("Stage 1 of ${curElement}"){
echo "Stage 1"
}
stage("Stage 2 ${curElement}"){
echo "Stage 2"
try {
// some steps that may fail
}
catch( Exception e ) {
echo "Stage 2 failed! Error: $e"
throw // Rethrow exception, to let the build fail.
}
}
}
}
}
parallel stageMap
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/476094.html
標籤:詹金斯 时髦的 詹金斯管道 jenkins-groovy 詹金斯声明式管道
