提问者:小点点

将Jenkins管道中的一个阶段标记为“不稳定”,但继续未来阶段?


我将使用Jenkins管道插件在多个节点123上测试几个二进制文件。在我的测试结束时,我希望得到所有可能组合的每个结果。因此,当单个阶段失败时,我的管道可能不会中止。应该继续。

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'
            }
        }
    }
}

共3个答案

匿名用户

声明性管道:虽然在声明性管道中使用< code > current build . result = ' UNSTABLE ' 也可以工作,但是Blue Ocean将所有阶段显示为不稳定,而不管哪个阶段失败。

要仅将特定阶段标记为不稳定,请在您的阶段中使用此处描述的步骤不稳定(消息:String)并安装/更新以下插件:

  • 管道:2.16 或更高版本的基本步骤
  • 管道:2.34 或更高版本的 API 插件
  • 管道:时髦到 2.70 或更高版本
  • 管道图分析到 1.10 或更高版本

样品管道阶段:

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 '

在异常处理程序中。