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

问题描述 投票:0回答:1

我的 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 内部,则不会显示原因,从而重新抛出异常。

groovy jenkins-pipeline
1个回答
9
投票

当在

finally
块内或在
catch
内重新抛出额外异常之前,会发生这种情况。在这些情况下,
RejectedAccessException
会被吞下,而
script-security
不会接住它。

© www.soinside.com 2019 - 2024. All rights reserved.