I am new to groovy. Here I declared some list and using def keyword and use it in function to trigger a job and store it in list but it throws error :
MissingPropertyException No such property: buildJobArray for class: groovy.lang.Binding
Even if I declared a list. I don't understand whats wrong with my code
def triggerBuildArray = []
def buildJobArray = []
def jobArray = []
def paramsArray = []
def noOfJob = 2
//function to trigger job
def triggerJob(def job, def params, def jobNo) {
buildJobArray << job.scheduleBuild2(0, new Cause.UpstreamCause(build), new ParametersAction(params))
println"triggered job "+jobNo;
println"waiting for completion of job "+jobNo;
}
jobArray << Hudson.instance.getJob('job1');
//define parameters
paramsArray << [
new StringParameterValue('baseurl',build.getEnvironment(listener).get('ORAbaseurl')),
new StringParameterValue('firm',build.getEnvironment(listener).get('ORAfirm')),
new StringParameterValue('loginname',build.getEnvironment(listener).get('ORAloginname'))
]
for(int i=0;i<noOfJob;i++)
{
triggerJob(jobArray[i],paramsArray[i],i+1);
}
but it gives error
ERROR: Build step failed with exception
groovy.lang.MissingPropertyException: No such property: buildJobArray for class: groovy.lang.Binding
at groovy.lang.Binding.getVariable(Binding.java:63)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:242)
at org.kohsuke.groovy.sandbox.impl.Checker$6.call(Checker.java:288)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:292)
at org.kohsuke.groovy.sandbox.impl.Checker$checkedGetProperty$1.callStatic(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:56)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:194)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:230)
at Script1.triggerJob(Script1.groovy:19)
Here i found another way to do this. Here I used 'def' keyword to define a variable due to use of def keyword it becomes local variable. If you dont use def keyword to variable it becomes global variable.
def buildJobArray = [] //local variable
buildJobArray = [] // Global variable
so once you used global variable it can be accessed from any function.