我将使用Jenkins管道插件在多个节点let ritemprocess (a:Room) =
match a.item with
| Bomb bomb -> procBomb bomb
...
A
{{1}上测试多个二进制文件B
C
1
}。
在我的测试结束时,我希望得到所有可能组合的每一个结果。因此,当单个阶段失败时,我的管道可能不会中止。它应该继续。
2
但是当第一个二进制返回的值不等于零(" Binary不在系统上工作")时,它的阶段被标记为FAILURE,并且跳过任何其他阶段。
Jenkins Pipeline是否有可能将舞台标记为"不稳定"但继续运行其他测试?
根据Continue Jenkins job after failed stage while marking stage as failed,无法将此步骤标记为失败。并行运行任务的解决方案对我的设置不起作用。那么可以安全地将其标记为某些东西吗?是否可以操纵舞台的结果?
这个问题How to continue past a failing stage in Jenkins declarative pipeline syntax意图使用脚本化管道。如果有可能以其他方式进行,我想避免这样做。
3
答案 0 :(得分:2)
现在有一个更优雅的解决方案,不仅允许您设置阶段,而且工作结果不稳定。使用catchError
,您可以设置阶段和构建结果的任意组合:
pipeline {
agent any
stages {
stage('1') {
steps {
sh 'exit 0'
}
}
stage('2') {
steps {
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
sh "exit 1"
}
}
}
stage('3') {
steps {
sh 'exit 0'
}
}
}
}
在上面的示例中,所有阶段都将执行,管道将成功,但是阶段2将显示为失败:
如上所述,您可以自由选择buildResult
和stageResult
。您甚至可以使构建失败并继续执行管道。
只需确保您的Jenkins是最新的,因为这是一个相当新的功能。 (管道:“基本步骤”必须为2.18或更高版本)
答案 1 :(得分:1)
对于脚本化管道,您可以在阶段内使用try .. catch块,然后设置currentBuild.result = 'UNSTABLE'
在异常处理程序中。
答案 2 :(得分:1)
声明性管道:尽管使用currentBuild.result = 'UNSTABLE'
也可以在声明性管道中使用,但无论哪个阶段失败,Blue Ocean都将所有阶段显示为不稳定状态。
要仅将特定阶段标记为不稳定阶段,请按照阶段here中的步骤unstable(message: String)
进行操作,并安装/更新以下插件:
示例管道阶段:
stage('Sign Code') {
steps {
script {
try {
pwd()
sh "<YOUR SCRIPT HERE>"
}
catch (err) {
unstable(message: "${STAGE_NAME} is unstable")
}
}
}
}
注意:这还将标记整个构建状态为不稳定。