jenkins - 如果设置共享库失败,如何运行发布操作?
问题描述
我正在通过@Library('shared-lib') _
. 管道脚本实现发布操作。例如
post {
always {
script {
// Do stuff
}
}
}
当共享库出现错误时,Jenkins 只会使整个构建失败,并且不会执行 post 操作块,因为它看起来(使用错误的存储库 URL 和不存在的分支进行测试)。如果 GitHub 出现故障,我希望 Jenkins 运行发布操作以通知发布者构建失败。有没有办法做到这一点,而无需发行人进行某种 API 调用以进行验证?
感谢您的任何建议!
解决方案
控制共享库加载的一种方法是动态加载库,当你这样做时,你可以用一个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 平台上,这种情况比较少见。
推荐阅读
- javascript - javascript & html - 每次用户在文本框中输入项目时创建新的复选框选项
- r - 提取句子中的第一个字符串
- java - 来电弹出错误:无法添加窗口 android.view.ViewRootImpl$W@e5b2272 -- 窗口类型 2003 的权限被拒绝
- c++ - SIGSEGV 因为关于基类/派生类的继承问题
- ruby-on-rails - 本地无法连接IP但4G设备可以连接IP?
- swift - RealityKit – 如何将视频材质添加到 ModelEntity?
- angular - 如何阻止用户输入带参数的 url?(如果用户手动输入带有参数的url,我想让它重定向到主页)
- android - 所有活动的自定义工具栏未按预期工作?
- primefaces - p:datatable 中的 p:selectmanycheckbox 覆盖选择
- php - 我怎样才能做到这一点更具可读性?