try/catch/finally 在 groovy 编译器异常的情况下屏蔽 Jenkinsfile 问题

2024-03-28

我的 Jenkinsfile 中有类似于以下代码的代码:

node {
   checkout scm
   // do some stuff
   try {
       // do some maven magic
   } catch (error) {
       stage "Cleanup after fail"
       emailext attachLog: true, body: "Build failed (see ${env.BUILD_URL}): ${error}", subject: "[JENKINS] ${env.JOB_NAME} failed", to: '[email protected] /cdn-cgi/l/email-protection'
       throw error
   } finally {
       step $class: 'JUnitResultArchiver', testResults: '**/TEST-*.xml'
   }
}

如果上面的代码由于一些与 jenkins-pipeline 相关的错误而失败try { }(例如,使用未经批准的静态方法)脚本会默默失败。当我删除 try/catch/finally 时,我可以看到错误。 难道我做错了什么?不应该重新抛出error使管道错误出现在日志中?

编辑: 我已经设法将问题确定为常规语法,例如我使用了一个尚未分配的变量。 例子: echo foo If foo未在 Jenkins 构建失败的任何地方声明/分配,并且如果它位于重新抛出异常的 try/catch/finally 内部,则不会显示原因。


当在内部抛出额外的异常时会发生这种情况finally块内或重新扔之前catch。在这些情况下RejectedAccessException被吞掉并且script-security没有抓住它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

try/catch/finally 在 groovy 编译器异常的情况下屏蔽 Jenkinsfile 问题 的相关文章

随机推荐