groovy.lang.MissingPropertyException:否这样的属性:class groovy.lang.Binding的buildJobArray

时间:2018-11-19 13:20:18

标签: jenkins groovy

我是新手。在这里,我声明了一些列表,并使用def关键字并将其用于函数中以触发作业并将其存储在列表中,但它会引发错误MissingPropertyException没有此类属性:groovy.lang.Binding类的buildJobArray,即使我声明了列表也是如此。我不明白我的代码有什么问题

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

        }

但是它给出了错误

        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

2 个答案:

答案 0 :(得分:1)

在这里,我找到了另一种方法。在这里,我使用'def'关键字定义了一个变量,因为使用def关键字会使其成为局部变量。如果不使用def关键字进行变量,则它将成为全局变量。

def buildJobArray = []   //local variable

buildJobArray = []  // Global variable

因此,一旦您使用了全局变量,就可以从任何函数中访问它。

答案 1 :(得分:0)

没有Class实现可以保存变量triggerBuildArray,buildJobArray,jobArray,paramsArray,noOfJob。在您的情况下,您需要将对象buildJobArray引用传递给函数triggerJob。

尝试以下代码。

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

    }