Hi,

I want to load a groovy script and execute methods of that script in a 
simple scripted pipeline. but it failed to run the groovy script when 
loading the groovy script, the script is very simple, I tested it on my 
local computer, it ran successfully, I have the following configuration:
//Jenkinsfile
node("master"){
stage("test1"){

checkout([$class: 'GitSCM', branches: [[name: "refs/heads/master"]],
doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [],
userRemoteConfigs: [[credentialsId: 'xxx', url:
"git@xxx:xxx.git"]]])

def script=load "${env.WORKSPACE}/scripts/debug1.groovy"
script.hello()
}
}

//scripts/debug1.groovy
def initVariableBindings() {
def tempArr=["WORKSPACE"]
tempArr.each {
if (System.getenv(it) != null) {
this.binding.setProperty(it, System.getenv(it))
} else if (System.getProperty(it) != null) {
this.binding.setProperty(it, System.getProperty(it))
} else {
println "Failed to init variable "+ it;
}
}
}
def hello(){
println "hello ${WORKSPACE}"
}
initVariableBindings()

it throws the following exception:

groovy.lang.MissingFieldException: No such field: binding for class: 
Script1 at groovy.lang.MetaClassImpl.getAttribute(MetaClassImpl.java:2846) 
at groovy.lang.MetaClassImpl.getAttribute(MetaClassImpl.java:3782) at 
org.codehaus.groovy.runtime.InvokerHelper.getAttribute(InvokerHelper.java:147) 
at 
org.codehaus.groovy.runtime.ScriptBytecodeAdapter.getField(ScriptBytecodeAdapter.java:306)
 
at org.kohsuke.groovy.sandbox.impl.Checker$9.call(Checker.java:437) at 
org.kohsuke.groovy.sandbox.GroovyInterceptor.onGetAttribute(GroovyInterceptor.java:96)
 
at 
org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetAttribute(SandboxInterceptor.java:438)
 
at org.kohsuke.groovy.sandbox.impl.Checker$9.call(Checker.java:434) at 
org.kohsuke.groovy.sandbox.impl.Checker.checkedGetAttribute(Checker.java:439) 
at 
com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getAttribute(SandboxInvoker.java:37)
 
at 
com.cloudbees.groovy.cps.impl.AttributeAccessBlock.rawGet(AttributeAccessBlock.java:20)
 
at Script1.initVariableBindings(Script1.groovy:8) at 
com.cloudbees.groovy.cps.CpsDefaultGroovyMethods.each(CpsDefaultGroovyMethods:2030)
 
at 
com.cloudbees.groovy.cps.CpsDefaultGroovyMethods.each(CpsDefaultGroovyMethods:2015)
 
at 
com.cloudbees.groovy.cps.CpsDefaultGroovyMethods.each(CpsDefaultGroovyMethods:2056)
 
at Script1.initVariableBindings(Script1.groovy:4) at 
Script1.run(Script1.groovy:17) at ___cps.transform___(Native Method)
....


it complains that the List variable tempArr in the function 
initVariableBindings is not a binding property, but it is a local variable, 
it should work, is this normal behavior and why or a bug of groovy plugin? 

Thanks.

-- 
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 jenkinsci-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-users/04d955dd-e2ce-4802-b195-dacb991d7fecn%40googlegroups.com.

Reply via email to