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

try/catch/finally在groovy编译器异常的情况下屏蔽文件问题,groovy,jenkins-workflow,jenkins-pipeline,jenkinsfile,Groovy,Jenkins Workflow,Jenkins Pipeline,Jenkinsfile,我的Jenkins文件中有类似于以下代码的代码: 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}",

我的Jenkins文件中有类似于以下代码的代码:

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'
   }
}
如果上面的代码由于
try{}
中的某些与jenkins管道相关的错误而失败(例如,使用未经批准的静态方法),则脚本会自动失败。当我删除try/catch/finally时,我可以看到错误。 我做错什么了吗?重新引用
error
是否应该使管道错误出现在日志中

编辑: 当我使用一个尚未赋值的变量时,我已经设法将问题归结到groovy语法上。 例子:

埃科富

如果未在任何位置声明/分配
foo
,Jenkins将使生成失败,并且不会显示原因,如果它位于重试异常的try/catch/finally中。

当在
finally
块内或在重试
catch
之前抛出额外异常时,就会发生这种情况。在这些情况下,
RejectedAccessException
被吞没,而
脚本安全性
没有捕获它。

如果这是普通的Groovy,是的,它会工作,但是因为这是Groovy DSL,DSL运行程序可以做任何它想做的事情,除了。。。也许你应该试试这个:@RenatoBut建议try/catch/finally也应该正确,但是如果你有这个问题,看起来好像没有……你解决了这个问题吗?我遇到了完全相同的问题,我无法找到一些代码将生成结果表单保存在try块中。如何将try块的shell错误输出转换为变量。最后不会在内部抛出异常,因为当我删除try块中有问题的行时,它会正常工作。然后它必须在重新抛出内部catch之前。不,如果groovy脚本使用例如未声明的变量,则很容易复制。没有异常堆栈跟踪,当我删除try/catch/finally时,我得到了堆栈跟踪。如果有最小的可复制测试用例,请将其归档。