脚本化Jenkins管道:失败时继续

脚本化Jenkins管道:失败时继续,jenkins,groovy,jenkins-pipeline,Jenkins,Groovy,Jenkins Pipeline,即使前一阶段失败,是否有办法继续执行脚本化管道?在整个作业失败之前,当构建失败时,我需要运行特定的命令(清理)。通常的方法是将步骤包装在try块中 试试看{ “嘘……” }捕捉(错误){ 回应“失败的事情” } //清理 sh“rm-rf*” 为了减轻痛苦并使管道代码更具可读性,我将其封装在另一种方法中 另一种方法,特别是因为这个问题而创建的,是声明性管道(,) 将始终清理作业,即使其余作业失败接受的答案不会使该阶段失败,甚至不会将其标记为不稳定。现在可以使阶段失败,继续执行管道并选择生成结果

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

通常的方法是将步骤包装在
try
块中

试试看{
“嘘……”
}捕捉(错误){
回应“失败的事情”
}
//清理
sh“rm-rf*”
为了减轻痛苦并使管道代码更具可读性,我将其封装在另一种方法中

另一种方法,特别是因为这个问题而创建的,是声明性管道(,)


将始终清理作业,即使其余作业失败

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

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

这是否意味着如果构建(sh“…”)失败,这一步骤(try)将显示为成功?嗯-在这种情况下,至少在使用输入步骤时,认为该步骤标记为成功。听起来合理。您可以使用
currentBuild.result='FAILURE'
手动将生成设置为失败(在继续执行时)。对于使用声明性管道的用户,请尝试。谢谢,我已更新了问题,以反映这是关于良好的旧脚本管道的。我们在哪里可以找到此问题
java.lang.NoSuchMethodError:没有这样的DSL方法“post”
post
是声明性管道的一部分。OP询问了使用
节点编写的脚本化管道。这样,您就可以使用
try{…}catch(e){…}finally{…cleanup}
另请参见
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'
            }
        }
    }
}