如何在Jenkins中捕获任何管道错误?

时间:2016-12-29 14:09:08

标签: jenkins jenkins-pipeline

我有一个Jenkins管道脚本,在大多数情况下工作正常,我会围绕大多数事情,这会触发尝试捕获的致命错误。然而,我不时会发生意想不到的事情,并且我希望能够在安装失败之前有一个安全的全部可用来进行最终报告。

没有最终默认'阶段'我可以在错误未被捕获时定义运行吗?

2 个答案:

答案 0 :(得分:5)

您可以将所有构建阶段包装在一个大try/catch/finally {}块中,例如:

node('yournode') {
    try {
        stage('stage1') {
            // build steps here...
        }
        stage('stage2') {
            // ....
        }
    } catch (e) {
        // error handling, if needed
        // throw the exception to jenkins
        throw e
    } finally {
        // some common final reporting in all cases (success or failure)
    }
}

答案 1 :(得分:0)

虽然已经针对脚本化管道进行了回答,但我想指出,对于声明性管道,这是通过post section完成的:

pipeline {
    agent any
    stages {
        stage('No-op') {
            steps {
                sh 'ls'
            }
        }
    }
    post {
        always {
            echo 'One way or another, I have finished'
            deleteDir() /* clean up our workspace */
        }
        success {
            echo 'I succeeeded!'
        }
        unstable {
            echo 'I am unstable :/'
        }
        failure {
            echo 'I failed :('
        }
        changed {
            echo 'Things were different before...'
        }
    }
}

每个阶段在需要时也可以拥有自己的部分。