脚本Jenkins管道:继续失败

use*_*257 5 groovy jenkins jenkins-pipeline

有没有办法继续执行脚本化管道,即使前一阶段失败了?我需要在整个作业失败之前构建失败时运行特定的命令(清理).

Eri*_*k B 16

接受的答案不会使阶段失败,甚至将其标记为不稳定。现在可以使阶段失败,继续执行管道并选择构建结果:

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 是最新的,因为这是一个相当新的功能。


Ste*_*ing 14

通常的方法是将您的步骤包装在一个try块中.

try {
  sh "..."
} catch (err) {
  echo "something failed"
}
// cleanup
sh "rm -rf *"
Run Code Online (Sandbox Code Playgroud)

为了减轻痛苦并使管道代码更具可读性,我在我的全局库代码中将其封装在另一个方法.

另一种方法,尤其是 因为这个问题而创建的是声明性管道 (博客,演示).

  • 听起来很合理.您可以使用`currentBuild.result ='FAILURE'来手动将构建设置为_FAILED_(在继续执行时). (2认同)