我的 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]'
throw error
} finally {
step $class: 'JUnitResultArchiver', testResults: '**/TEST-*.xml'
}
}
如果上述代码由于
try { }
中的一些与 jenkins-pipeline 相关的错误(例如使用未经批准的静态方法)而失败,则脚本将默默失败。当我删除 try/catch/finally 时,我可以看到错误。
我做错了什么吗?重新抛出 error
不应该使管道错误出现在日志中吗?
编辑: 我已经设法将问题确定为常规语法,例如我使用了一个尚未分配的变量。 示例:
echo foo
如果
foo
没有在任何地方声明/分配,Jenkins 将导致构建失败,并且如果它位于 try/catch/finally 内部,则不会显示原因,从而重新抛出异常。
当在
finally
块内或在 catch
内重新抛出额外异常之前,会发生这种情况。在这些情况下,RejectedAccessException
会被吞下,而 script-security
不会接住它。