25

我的 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: 'someone@example.com'
       throw error
   } finally {
       step $class: 'JUnitResultArchiver', testResults: '**/TEST-*.xml'
   }
}

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

编辑:当我使用尚未分配的变量时,我已经设法将问题归结为 groovy 语法。示例: echo foo 如果foo没有在任何地方声明/分配,Jenkins 将失败构建,并且如果它在重新抛出异常的 try/catch/finally 内,则不会显示原因。

4

1 回答 1

7

当在finally块内或在重新抛出内部之前抛出一个额外的异常时,就会发生这种情况catch。在这些情况下,RejectedAccessException它会被吞下,script-security但不会抓住它。

于 2016-05-26T13:34:13.753 回答