Groovy沙盒阻止工作流cps全局lib插件中的类



我们有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目录中。

如果您在类中提供一个创建实例的静态方法(即工厂模式),它应该绕过安全插件的这一方面。

最新更新