Last Updated
Viewed 26 Times
           

I'm new to groovy and that is why I ask for your help. I do not understand why my build fails, but this is the issue:

I want to make an if statement about the variable output "sofia".

So if kubernetes == sofia do this, else...something else

However when the variable is empty it gives me :

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

Finished: FAILURE

Here is my code:

         stage('Refresh AWS Environment') {
                environment {
                    BN = sh(script: "echo $GIT_BRANCH | cut -d '/' -f 2", returnStdout: true).trim()
                    BRANCH_RELEASE = sh(script: "find synchr -type f -name gradle.properties -exec grep release {} + | cut -d= -f2", returnStdout: true).trim()
                    COMMIT = sh(script: "git log -1 --date=iso | grep ^commit | cut -d ' ' -f 2", returnStdout: true).trim()
                    COMMIT_DATE = sh(script: "git log -n 1 --pretty='format:%cd' --date=format-local:'%Y%m%d-%H%M%S'", returnStdout: true).trim()
                    BUILD_TIME = sh(script: "date '+%Y/%m/%d-%H:%M:%S'", returnStdout: true).trim()
                    awstag = "$BN-$COMMIT_DATE"
                    kubernetes = sh(script: "grep 'sofia' registry/environments/${BN}.yaml | cut -d : -f2", returnStdout: true).trim()
                    namespace = sh(script: "grep 'namespace' registry/environments/${BN}.yaml | cut -d : -f2", returnStdout: true).trim()
                }
                steps {
                    script {
                        withCredentials([usernamePassword(credentialsId: 'apiuser', usernameVariable: 'username', passwordVariable: 'token')]) {

                            if (kubernetes == 'sofia') {


                                sh "curl --insecure -g --user \"$username:$token\" -F \"nameSpace=$namespace\" -F \"tag=$awstag\"  https://192.168.20.223:8443/job/Ci-refresh//buildWithParameters"
                                sh "sleep 25"
                                def response

                                timeout(90) {
                                    waitUntil {
                                        response = sh(
                                                script: "curl --insecure --silent -g --silent --user \"$username:$token\"   https://192.168.20.223:8443/job/Ci-refresh/lastBuild/api/json | grep -i success",
                                                returnStatus: true
                                        )

                                        return (response == 0)
                                    }
                                }

                                if (response != 0) {
                                    build.result = 'ERROR'
                                }
                            } else {
                                try {
                                    build job: 'kubernetes-management/ci-refresh', parameters: [[$class: 'StringParameterValue', name: 'nameSpace', value: projectYaml?.namespace], [$class: 'StringParameterValue', name: 'tag', value: awstag]]
                                } catch (Exception e) {
                                    println "CI not performed for ${BN} ${e.message}"
                                }
                            }
                        }
                    }
                }
            }

I have a simple jenkinsfile as shown below:

pipeline { 
agent any 
stages {
    stage('Build') { 
        steps { 
            sh './mvnw compile' 
        }
    }
    stage('Test'){
        steps {
            sh './mvnw test'
        }
    }
  }
}

and a simple Jenkins pipeline with repository URL and credentials( I can confirm that the credentials are fine because otherwise jenkins gives error rightaway).

But when I run this pipeline, I get error as follows:

groovy.lang.MissingPropertyException: No such property: pipeline for class: 
groovy.lang.Binding
at groovy.lang.Binding.getVariable(Binding.java:63)
at 
org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.
SandboxInterceptor.onMethodCall(SandboxInterceptor.java:130)
at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:155)
    at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:159)
    at 
com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall
(SandboxInvoker.java:17)
    at WorkflowScript.run(WorkflowScript:1)
    at ___cps.transform___(Native Method)
    at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall
 (ContinuationGroup.java:57)
    at 
com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.
dispatchOrArg
(FunctionCallBlock.java:109)
at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.
fixArg(FunctionCallBlock.java:82)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke
(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke
(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at 
 com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive
 (ContinuationPtr.java:72)
    at com.cloudbees.groovy.cps.impl.ClosureBlock.eval(ClosureBlock.java:46)
    at com.cloudbees.groovy.cps.Next.step(Next.java:83)
    at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:174)
    at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:163)
    at org 
 .codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use
 (GroovyCategorySupport.java:122)
     at org.codehaus.groovy.runtime.GroovyCategorySupport.use
(GroovyCategorySupport.java:261)
    at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:163)
    at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$101
(SandboxContinuable.java:34)
    at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.
 lambda$run0$0(SandboxContinuable.java:59)
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.
runInSandbox(GroovySandbox.java:108)
    at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0
(SandboxContinuable.java:58)
    at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk
(CpsThread.java:174)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run
(CpsThreadGroup.java:332)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$200
(CpsThreadGroup.java:83)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call
(CpsThreadGroup.java:244)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call
(CpsThreadGroup.java:232)
at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call
(CpsVmExecutorService.java:64)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at hudson.remoting.SingleLaneExecutorService$1.run
(SingleLaneExecutorService.java:131)
at jenkins.util.ContextResettingExecutorService$1.run
(ContextResettingExecutorService.java:28)
at jenkins.security.ImpersonatingExecutorService$1.run
(ImpersonatingExecutorService.java:59)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker
(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run
(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Finished: FAILURE

I am new to groovy, but this seems to be strange. I tried to follow other questions on stackoverflow but with no help.

If anybody has encountered this before, your guidance will help and will be really appreciated.

Thanks a lot, -Pankaj

We're upgrading to a newer version of Jenkins (2.60.1) and a groovy script which was working in the previous Jenkins version (1.596/2) no longer works.

This is a Jenkins build project, which is parameterized and we're using a Groovy script to provide the choices for a Choice Provider (the Choice Provider is set to System Groovy Choice Parameter).

We're trying to get access to the Jenkins environment variables and do so like this (this is part of the Groovy script):

import hudson.slaves.EnvironmentVariablesNodeProperty
import hudson.EnvVars

EnvironmentVariablesNodeProperty prop = jenkins.getGlobalNodeProperties().get(EnvironmentVariablesNodeProperty.class)
EnvVars env = prop.getEnvVars()

def MY_VAR = env['MY_JENKINS_VAR']

However, I'm getting the following error when running the script:

Failed to execute script

groovy.lang.MissingPropertyException: No such property: jenkins for class: groovy.lang.Binding
at groovy.lang.Binding.getVariable(Binding.java:63)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:224)

It seems to me the "jenkins" reference is expected to be a built-in property provided by Jenkins or perhaps Groovy, but I can't find any information on what I need to do to make it accessible from the Groovy script.

Thanks for any help.

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, evenif i declared a list. I dont 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

Similar Question 6 (1 solutions) : No such property: clean for class groovy.lang.Binding

cc