我们有https://github.com/jenkinsci/workflow-cps-global-lib-plugin在使用中,它被用于(git-reo)为管道作业创建通用助手。当我尝试使用工作流库repo中的类时,groovy沙盒出现了问题。
我得到了这个例外:
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: unclassified new <path_to_my_class>
通过阅读插件的文档,我得到的印象是,这个通用的repo是可信的,在那里定义的类不会被沙盒化。
此外,如果在源文件中定义了没有"class"关键字的类,即只实现了通过沙箱安全检查的方法,而不是其他方法。但是,在不定义类和构造函数的情况下,我怎么能对构造函数进行参数化呢?
我想让下面的用例在不被沙箱阻止的情况下工作。
在".org/mylib"目录中,我用以下实现定义了类MyClass.groovy。
package org.mylib
class MyClass implements Serializable {
MyClass(String someString) {
this.data = someString
}
String data
String data() {
return this.data
}
}
为什么这是在沙盒中运行的,以及我如何解决它?
如果你没有得到旁边的approve按钮,那就没有阻塞。它很可能找不到它。
插件网站上提到的实际文档指出,布局是:
(root)
+- src # Groovy source files
| +- org
| +- foo
| +- Bar.groovy # for org.foo.Bar class
+- vars
| +- foo.groovy # for global 'foo' variable
| +- foo.txt # help for 'foo' variable
+- resources # resource files (external libraries only)
| +- org
| +- foo
| +- bar.json # static helper data for org.foo.Bar
所以我目前的猜测是应该将它移到src目录中。
如果您在类中提供一个创建实例的静态方法(即工厂模式),它应该绕过安全插件的这一方面。