我们正在使用Jenkins文件,其中一些库使用
动态加载library identifier: "my-lib@$version", retriever: modernSCM(
[$class: 'GitSCMSource',
remote: 'my-repourl',
credentialsId: credentials])
在由其他团队管理的Jenkins实例中,并安装了Pipeline Utility Steps插件。
这个Jenkins文件托管在一个存储库中,该存储库还有一个我们想要读取的JSON文件,如下所示:
{
"foo" : {
"bar" : {
"dummy1" : "hjk",
"dummy2" : "Rio",
"dummy3" : "qwe"
}
},
"foo2" : {
"bar2" : {
"asd1" : "aa",
"asd2" : "bb"
},
"bar3" : {
"pepe1" : "aaa",
"pepe2" : "bbb",
"pepe3" : "ccc"
}
}
}
所以在Jenkinsfile中我们加载库,我们检查repo并调用存储在该加载库中的函数,我们在env变量中保存readJSON步骤中返回的值。
当我们尝试访问存储的env变量的某些键时,问题出现了:
def load(path) {
env.CONFIGURATION = readJSON(file: path)
echo env.CONFIGURATION.foo.bar.dummy1 // ERROR
}
我们收到以下错误:
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: unclassified field java.lang.String foo
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.unclassifiedField(SandboxInterceptor.java:387)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:371)
at org.kohsuke.groovy.sandbox.impl.Checker$6.call(Checker.java:282)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:286)
at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getProperty(SandboxInvoker.java:29)
at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:20)
at configuration.load(/var/lib/jenkins/jobs/TEST/jobs/my-lib/branches/master/builds/65/libs/my-lib/vars/configuration.groovy:7)
at WorkflowScript.run(WorkflowScript:27)
at ___cps.transform___(Native Method)
at com.cloudbees.groovy.cps.impl.PropertyishBlock$ContinuationImpl.get(PropertyishBlock.java:74)
at com.cloudbees.groovy.cps.LValueBlock$GetAdapter.receive(LValueBlock.java:30)
at com.cloudbees.groovy.cps.impl.PropertyishBlock$ContinuationImpl.fixName(PropertyishBlock.java:66)
at sun.reflect.GeneratedMethodAccessor285.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive
我们觉得这与Jenkins沙箱有关,它不允许访问这些字段,但我们想知道问题是这个还是其他完全不同的东西,并且知道是否有人面对同样的问题。
你有线索吗?