设置共享库失败如何运行post操作?

How to run post actions if setting up the shared library fails?

我正在通过 @Library('shared-lib') _ 使用共享库。管道脚本实现 post 操作。例如

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

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

感谢任何建议!

控制共享库加载的一种方法是 Loading libraries dynamically,当你这样做时,你可以用 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平台,这种场景比较少见