Groovy 对象的方法在 Jenkins 沙盒模式下调用方法



我正在尝试在我的jenkins共享库中实现decorator模式。我想装饰">timeout try-catch"块,所以每当调用某个类的某个方法时(装饰器不在乎那是什么类,那是什么方法(,它就会自动包装在超时try-catch>块中。但为此,我需要重写decorator类中的方法"invokeMethod"。以下是Jenkinsfile中导致错误的最小代码:

node {
sh 'echo "the content"'
new MyClass().doSomething() // output: doSomething
}
class MyClass {
def invokeMethod(String name, args) {
println name
}
}

我得到以下错误:org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:脚本不允许使用groovy.lang.GroovyObject invokeMethod java.lang.String java.lang.Object(MyClass doSomething(

有没有任何方法可以在不退出Jenkins的"沙箱"模式的情况下覆盖invokeMethod或实现动态装饰器模式(它不关心装饰类及其方法(?

假设您有管理员访问权限,您可以去并特别批准使用该方法(请参阅https://stackoverflow.com/a/56023403/107331(,但要注意,如果你有非管理员用户在你的Jenkins实例上提交作业,那么简单地批准这种方法可能是危险的。

另一个选项是批准使用这个装饰器的每个脚本。

最新更新