Hi,
Why I'm getting:
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:
Scripts not permitted to use method groovy.lang.GroovyObject invokeMethod
java.lang.String java.lang.Object
when built-in steps are used inside closure for a global variable when
closure.delegate = instance of class?
Please check the example bellow:
In shared library I have file vars/buildPlugin.groovy
def call(body) {
def config = new Dsl()
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = config
body()
echo "Name set by closure: ${config.name}"
}
class Dsl {
def name
}
and here is how it is using in Jenkinsfile (or pipeline script):
@Library('library.name') _
buildPlugin {
name = 'name_from_Jenkinsfile'
echo "Name from Jenkinsfile: ${name}"
}
This causes error:
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:
Scripts not permitted to use method groovy.lang.GroovyObject invokeMethod
java.lang.String java.lang.Object (Dsl echo org.codehaus.groovy.runtime.
GStringImpl)
However if I change the delegate to be the Map everything works as expected:
def call(body) {
def config = [:]
// def config = new Dsl()
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = config
body()
echo "Name set by closure ${config.name}"
}
class Dsl {
def name
}
For what it's worth - If I uncheck Use Groovy Sandbox checkbox in pipeline
job config I don't have RejectedAccessException even when config is
instance of Dsl().
I know that I can just approve this signature but unlikely it is a right
way to go.
I will be grateful for any help/hint.
--
You received this message because you are subscribed to the Google Groups
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/jenkinsci-users/a676f305-73af-4991-8dee-e881a4c6f145o%40googlegroups.com.