1. ホーム
  2. ジェンキンス

[解決済み] [Solved] groovy.lang.MissingPropertyException: No such property: buildJobArray for class: groovy.lang.Binding

2022-03-03 20:06:49

質問

私はgroovyの初心者です。ここで、私はいくつかのリストを宣言し、defキーワードを使用して、ジョブをトリガし、リストにそれを格納するために関数でそれを使用しますが、それはエラーをスローします。

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

リストを宣言しても 私のコードで何が問題なのか理解できません。

        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)

解決方法は?

ここで私は別の方法を見つけました。ここではdefキーワードを使って変数を定義していますが、defキーワードを使うことでローカル変数になります。もし、defキーワードを使用しない場合は、グローバル変数になります。

def buildJobArray = []   //local variable

buildJobArray = []  // Global variable

というわけで、一度グローバル変数を使えば、どの関数からもアクセスできるようになります。