在groovy编译器异常的情况下,try/catch/finally掩盖Jenkinsfile问题

Krz*_*soń 23 groovy jenkins-workflow jenkins-pipeline jenkinsfile

我的代码类似于我在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'
   }
}
Run Code Online (Sandbox Code Playgroud)

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

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

amu*_*niz 7

当在finally块内或在重新抛出内部之前抛出另外的异常时会发生这种情况catch.在这些情况下,它RejectedAccessException被吞下并且script-security没有被捕获.