我将使用Jenkins管道插件在多个节点1
2
3上测试几个二进制文件。在我的测试结束时,我希望得到所有可能组合的每个结果。因此,当单个阶段失败时,我的管道可能不会中止。应该继续。
eg: A1 green, A2 green, A3 red, B1 green, B2 red, ..., C3 green
但是,当第一个二进制返回值不等于零(“二进制文件在系统上不起作用”)时,它的阶段被标记为失败,并且跳过任何其他阶段。
在 Jenkins 管道中是否有可能将阶段标记为“不稳定”,但继续运行其他测试?
根据Continue Jenkins的说法,在将阶段标记为失败时,在失败阶段之后执行的作业不能将此步骤标记为失败。并行运行任务的解决方案不适用于我的设置。那么,是否可以安全地将其标记为其他内容?有可能操纵一个阶段的结果吗?
此问题 如何继续跳过 Jenkins 声明性管道语法意图中的失败阶段以使用脚本化管道。如果可能以其他方式做到这一点,我想避免这种情况。
pipeline {
agent {label 'master'}
stages {
stage('A1') {
agent {label 'Node1'}
steps {
sh 'binA'
}
}
stage('A2') {
agent {label 'Node1'}
steps {
sh 'binB' // If this bin fails, all following stages are skipped
}
}
// ...
stage('C3'){
agent {label 'Node3'}
steps {
sh 'binC'
}
}
}
}
声明性管道:虽然在声明性管道中使用< code > current build . result = ' UNSTABLE ' 也可以工作,但是Blue Ocean将所有阶段显示为不稳定,而不管哪个阶段失败。
要仅将特定阶段标记为不稳定,请在您的阶段中使用此处描述的步骤不稳定(消息:String)
并安装/更新以下插件:
样品管道阶段:
stage('Sign Code') {
steps {
script {
try {
pwd()
sh "<YOUR SCRIPT HERE>"
}
catch (err) {
unstable(message: "${STAGE_NAME} is unstable")
}
}
}
}
注意:这也将整体构建状态标记为不稳定。
现在有一个更优雅的解决方案,它不仅允许您设置一个阶段,并且工作结果不稳定。使用 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将显示为失败:
如上所述,您可以自由选择< code>buildResult和< code>stageResult。您甚至可以让构建失败并继续执行管道。
只要确保您的 Jenkins 是最新的,因为这是一个相当新的功能。(管道:基本步骤需要是2.18或更高版本)
对于脚本管道,您可以使用try..捕捉阶段内的块,然后设置< code > current build . result = ' UNSTABLE '
在异常处理程序中。