我在Jenkins中定义了一个共享库:
import com.codependent.jenkins.pipelines.Utils
def call(List<String> mavenGoals){
def processedMavenGoals = mavenGoals.join ' '
pipeline {
agent any
...
}
如果我从我的项目的Jenkins文件中这样调用它就可以了:
#!groovy
@Library('jenkins-pipeline-shared-library-example') _
buildPipeline(['clean', 'install'])
但是如果我省略了Groovy语法允许的parethesis:
#!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)
答案 0 :(得分:2)
更新了jenkins后,我遇到了类似的问题。
在我的情况下,堆栈跟踪也显示org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException[...]
Jenkins有一个安全插件,可以阻止Jenkinsfile中的某些方法调用。
允许这些有时无害的电话:
答案 1 :(得分:0)
在大多数情况下,
在这种情况下,您可以尝试以编程方式强制批准方法(请参见此处的答案: https://stackoverflow.com/a/48234868/4807875)或手动更新Jenkins服务器上的$ JENKINS_ROOT / scriptApproval.xml文件。后者将需要root权限,并且Jenkins服务器重新启动才能生效(选项“从磁盘重载配置”无效)。
P。 S .:我没有测试它如何使用BlackList方法。