Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

groovy.lang.MissingPropertyException: No such property: buildJobArray for class: groovy.lang.Binding

Tags:

jenkins

groovy

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)

enter image description here

like image 242
Sumit Rane Avatar asked Nov 19 '18 13:11

Sumit Rane


2 Answers

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.

like image 166
Sumit Rane Avatar answered Nov 13 '22 13:11

Sumit Rane


There is no Class implementation to hold the variables triggerBuildArray, buildJobArray, jobArray,paramsArray, noOfJob. In your case, you need to pass the object buildJobArray reference into function triggerJob.

Try the below code.

    def triggerBuildArray = []
    def buildJobArray = []
    def jobArray = []
    def paramsArray = []
    def noOfJob = 2 

    //function to trigger job

    def triggerJob(def job, def params, def jobNo, def buildJobArray) {

    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, buildJobArray);

    }
like image 20
Vihar Manchala Avatar answered Nov 13 '22 14:11

Vihar Manchala