首页 > 解决方案 > 如果设置共享库失败,如何运行发布操作?

问题描述

我正在通过@Library('shared-lib') _. 管道脚本实现发布操作。例如

post {
    always {
        script {
           // Do stuff
        }
    }
}

当共享库出现错误时,Jenkins 只会使整个构建失败,并且不会执行 post 操作块,因为它看起来(使用错误的存储库 URL 和不存在的分支进行测试)。如果 GitHub 出现故障,我希望 Jenkins 运行发布操作以通知发布者构建失败。有没有办法做到这一点,而无需发行人进行某种 API 调用以进行验证?

感谢您的任何建议!

标签: jenkinsjenkins-pipeline

解决方案


控制共享库加载的一种方法是动态加载库,当你这样做时,你可以用一个try catch块包装加载阶段并处理失败。
但是,当使用这种技术时,错误将在管道执行之外处理,因此为了避免重复错误处理函数(发送通知),您可以在单独的方法(或共享库中)定义错误处理并调用它对于catch块和从post块。

就像是:

try {
    library "shared-lib"
}
catch(Exception ex){
    // handle the exception
    handleError(ex.getMessage())
}

pipeline {
    agent any
    stages {
        stage('Hello') {
            steps {
                ...
            }
        }
    }
    post {
        always {
            script {
                handleError(message)
            }
        }
    }
}

def handleError(message){
    emailext ...
}

您也可以尝试在管道步骤中加载库,从而post在失败时使用指令,但这可能会导致加载库的上下文出现问题,因此不建议这样做。
当然,您也可以分别处理每种故障类型并避免使用外部函数。

最后一件事,通常不会处理共享库故障,因为如果作业无法为 SCM 加载库,那么它可能无法从 SCM 加载管道本身,因此假设您将它们都托管在同一个 SCM 平台上,这种情况比较少见。


推荐阅读