我在 Jenkins 中定义了一个共享库:
import com.codependent.jenkins.pipelines.Utils
def call(List<String> mavenGoals){
def processedMavenGoals = mavenGoals.join ' '
pipeline {
agent any
...
}
如果我像这样从我的项目的 Jenkinsfile 中调用它,它就可以正常工作:
#!groovy
@Library('jenkins-pipeline-shared-library-example') _
buildPipeline(['clean', 'install'])
但是,如果我在 Groovy 语法允许的情况下省略了括号:
#!groovy
@Library('jenkins-pipeline-shared-library-example') _
buildPipeline ['clean', 'install']
执行显示以下异常。为什么?
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: unclassified getAt method buildPipeline[java.util.ArrayList]
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetArray(SandboxInterceptor.java:451)
at org.kohsuke.groovy.sandbox.impl.Checker$10.call(Checker.java:413)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetArray(Checker.java:418)
at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getArray(SandboxInvoker.java:45)
at com.cloudbees.groovy.cps.impl.ArrayAccessBlock.rawGet(ArrayAccessBlock.java:21)
at WorkflowScript.run(WorkflowScript:3)
at ___cps.transform___(Native Method)
最佳答案
我在更新 jenkins 后遇到了类似的问题。
在我的例子中,堆栈跟踪还显示了一个 org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException[...]
原因
Jenkins 有一个安全插件可以阻止 Jenkinsfile 中的某些方法调用。
解决方案
允许这些有时无害的调用:
- 转到:http://JENKINS_HOST/scriptApproval/ ( Official Documentation )
- 批准 Jenkinsfile 中被拒绝的操作
- 重新运行失败的构建以查看 Jenkinsfile 是否正常工作
关于Jenkins 声明性管道抛出 org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException : unclassified getAt method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46429657/