首页 > 解决方案 > Jenkinsfile:“RejectedAccessException:未找到此类字段”在 catch 块中

问题描述

我正在尝试将输入状态功能添加到我的 Jenkins 阶段代码中。但它正在抛出:

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:找不到这样的字段:

我试图把这个块写成

catch (org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException e) {
    cause = e.causes.get(0)
    echo "Aborted by " + cause.getUser().toString()
    if (cause.getUser().toString() != 'SYSTEM') {
    startMillis = System.currentTimeMillis()
    userAborted = true
    } else {
      endMillis = System.currentTimeMillis()
    if (endMillis - startMillis >= timeoutMillis) {
          echo "Approval timed out. Aborting the deployment."
      userAborted = true
    } else {
          echo "SYSTEM aborted, but looks like timeout period didn't complete. Aborting."
          userAborted = true
        }
    }
  } 

但是当我中止工作时使用此代码时,它被卡住了。

所以我用下面的代码修改: -

catch (Exception e) {
    cause = e.causes.get(0)
    echo "Aborted by " + cause.getUser().toString()
    if (cause.getUser().toString() != 'SYSTEM') {
    startMillis = System.currentTimeMillis()
    userAborted = true
    } else {
      endMillis = System.currentTimeMillis()
    if (endMillis - startMillis >= timeoutMillis) {
          echo "Approval timed out. Aborting the deployment."
      userAborted = true
    } else {
          echo "SYSTEM aborted, but looks like timeout period didn't complete. Aborting."
          userAborted = true
        }
    }
  } 

现在作业在中止时不会卡住,但在作业失败时再次抛出此错误:

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:找不到这样的字段:

标签: jenkinsgroovyjenkins-pipelinejenkins-groovy

解决方案


在检查了RejectedAccessException(在此处找到)的 API 后,我认为问题是e.causes.get(0)

causes不是一个RejectedAccessException异常告诉你的领域,所以你显然无法访问它。

API 提供了getCause()可以java.lang.Throwable使用的方法:

cause = e.getCause()

顺便说一句getUser(),也不是异常的方法,并且会抛出相同的异常。


推荐阅读