def jobs = [
'subjob1': true,
'subjob2': false,
'subjob3': true
]
pipeline
{
agent { label "ag1" }
stages
{
stage('stage1')
{
steps
{
script
{
jobs.each
{
if ("$it.value".toBoolean())
{
stage("Stage $it.key")
{
build([job:"$it.key", wait:true, propagate:true])
}
}
}
}
}
}
}
}
此Jenkins作业触发其他子作业(通过pipeline build step):subjob1
、subjob2
、subjob3
。如果任何子作业失败,则此作业将立即失败(propagate:true
)。
但是,我想做的是继续执行所有作业。如果一个或多个子作业失败,则将此作业标记为失败。我将如何执行此操作?
2条答案
按热度按时间lztngnrs1#
你可以这样做:你可以简单地使用一个catchError块。
cvxl0en22#
您可以在
parallel
中执行所有作业,而不是逐个执行所有作业。这样,所有作业将彼此独立地执行,并且stage1
仅在一个或多个作业失败时才会失败。根据文件
parallel
指令接受一个从分支名称到闭包的Map和一个可选参数failFast
,该参数将在任何其他分支失败时终止所有分支。因此,我们必须将阶段名称的
jobs
to aMap
转换为并行执行的Closures。我们将使用jobs.collectEntries()
构建Map,并将其作为参数传递给parallel
指令:我们可以省略
build
step中的wait
和propagate
标志,因为它们是默认设置的。在所提供的解决方案中,
Parallel
阶段(以及生成的构建)只有在一个或多个jobs
失败时才会失败。此外,如果您安装了Blue Ocean插件,您将看到Parallel
阶段沿着所有并行子阶段的漂亮视图图: