如何在 Jenkins 的嵌套 stage{} 块中执行 post{} 部分?
How to get a post{} section executed in a nested stage{} block in Jenkins?
如何将以下 post
部分添加到 运行?
这个想法是根据 myList
.
的内容生成并行的 运行ning 阶段
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...
然而Jenkins doc却说这是允许的
果然有一大堆允许的步骤,post 不在其中。
我是不是遗漏了什么,或者文档对这个案例不清楚?
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
}
}
如何将以下 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...
然而Jenkins doc却说这是允许的
果然有一大堆允许的步骤,post 不在其中。 我是不是遗漏了什么,或者文档对这个案例不清楚?
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
}
}