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

Cut*_*Eye 10 jenkins jenkins-pipeline

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

eg: A1 green, A2 green, A3 red, B1 green, B2 red, ..., C3 green
Run Code Online (Sandbox Code Playgroud)

但是当第一个二进制返回的值不等于零(“二进制不在系统上工作”)时,它的阶段被标记为 FAILURE 并且跳过任何其他阶段。

Jenkins Pipeline 是否有可能将阶段标记为“不稳定”但继续运行其他测试?

根据在失败阶段后继续詹金斯工作而将阶段标记为失败不能将此步骤标记为失败。并行运行任务的解决方案不适用于我的设置。那么是否可以安全地将其标记为其他内容?是否可以操纵阶段的结果?

这个问题如何继续过去 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'
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Eri*_*k B 12

现在有一个更优雅的解决方案,它不仅允许您设置一个阶段,而且工作结果不稳定。使用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'
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,所有阶段都将执行,管道将成功,但阶段 2 将显示为失败:

管道示例

如上所述,您可以自由选择buildResultstageResult。您甚至可以使构建失败并继续执行管道。

只要确保您的 Jenkins 是最新的,因为这是一个相当新的功能。(管道:基本步骤需要是 2.18 或更新版本)


Dib*_*tya 11

声明式管道:虽然currentBuild.result = 'UNSTABLE'也在声明式管道中使用作品,但无论哪个阶段失败,Blue Ocean 都将所有阶段显示为不稳定。

在此处输入图片说明

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

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

示例管道阶段

stage('Sign Code') {
    steps {
        script {
            try {
                pwd()
                sh "<YOUR SCRIPT HERE>"
            }
            catch (err) {                                        
                unstable(message: "${STAGE_NAME} is unstable")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

注意:这也将整体构建状态标记为不稳定。

  • 是的,它也适用于脚本化管道,只是您不需要使用“script{}”块作为 try-catch 块的包装器。 (2认同)

小智 5

对于脚本化管道,您可以在阶段内使用 try .. catch 块,然后设置currentBuild.result = 'UNSTABLE'

在异常处理程序中。