Jenkins脚本化和声明性管道之间的错误处理

时间:2019-05-08 19:25:18

标签: jenkins

我想通过脚本化管道构建许多声明性管道作业,并使用嵌套在父try / catch中的单独try / catch块来处理所有失败

node {
    def err = false
    try{
        stage('build image') {
            try {
                //this job is a declarative pipeline
                build job: 'build-docker-image' 
            } catch(e) {
                echo "failure at build-docker-image"
                throw e
            }
        }
        stage('deploy image') {
            try {
                //this job is a declarative pipeline
                build job: 'deploy-docker-image' 
            } catch(e) {
                echo "failure at deploy-docker-image"
                throw e
            }
        }
    } catch(e) {
        err = true
        echo "caught error ${e}"
    }
    if(!err) {
        echo "build and deploy ran successfully"
    }
}

此代码的行为不一致。 如果由于语法原因,构建作业失败,则子try / catch捕获错误并回显错误消息,然后将其扔给父级,父级也将其捕获并回显错误本身。 但是,如果构建工作由于不太明确的原因而失败,即映像未正确编译,则父try / catch仍会捕获该错误,并且行为与前面的示例相同,但是子try / catch不会捕获该错误。 ,并且不会回显其失败消息。

为什么会有差异?是否有由于声明的管道作业失败而导致try / catch块无法捕获的错误?混合使用脚本式和声明式管道是不好的做法吗?对于此方面的任何建议或见解,我将不胜感激。谢谢

0 个答案:

没有答案