我有一个声明性的Jenkins管道,包含stage1
、stage2
、stage3
等。如果stage1
设置构建不稳定/失败,我希望停止运行stage2
。
我知道在构建不成功时,可以使用return
停止stage1
中的步骤运行,但我找不到一种方法,可以在不运行stage1
以下阶段的情况下退出管道
这是我所拥有的:
stage('stage1') {
steps {
script{
//somesteps
if ("${stdout}" == "1"){
currentBuild.result = 'UNSTABLE'
return
} //if
//somesteps
} //script
} //steps
} //stage
// run only when stage1 is success
stage('stage2'){
when {
expression {
params.name ==~ /x|y/
}
}
steps {
script{
//stage2 steps
}
}
}
如果params.name ==~ /z/
将跳过阶段2执行阶段3
注意:我不能将stage 2/3/..中的步骤包含在stage1中。应该是这样。根据生成参数,stage 2/3/4...将在stage1之后调用
5条答案
按热度按时间fzwojiic1#
跳过剩余流水线阶段的最简单方法是设置一个变量,该变量将控制是否应跳过后续阶段。类似于:
这是一个非常简单的示例,在
Stage 1
处将skipRemainingStages
设置为true,并且跳过Stage 2
和Stage 3
,因为when
块中的表达式的计算结果不为true。或者,您可以呼叫
error(String message)
步骤来停止管缐,并将其状态设为FAILED
。例如,如果阶段1呼叫error(msg)
步骤,如下所示:在这种情况下,只要找到
error(msg)
步骤,流水线就会停止,并且忽略所有剩余阶段(甚至不检查when
块)。当然,您可以根据某些条件调用
error(msg)
,使其仅在满足特定条件时才变为FAILED
。ogq8wdun2#
您可以在阶段中使用post来结束,如下所示:
这将中止生成,作业将不会进一步运行。
ws51t4hk3#
你也可以简单地抛出一个异常。这将中止构建。事实上,简单地在catch子句中设置构建状态工作得很好。你也可以在finally块中添加自定义逻辑,用于发送构建状态更改的通知(电子邮件、Slack消息等)。
因此,可能会出现以下情况。注意:我已经从一个现有的Jenkinsfile中复制了一些。所以不能100%确定这和你使用的语法是一样的:
cvxl0en24#
您可以尝试:
bpsygsoo5#
您可以使用将构建标记为失败,然后使用
sh "exit 1"
中断其在Jenkins管道中的执行,如下所示: