Any input, anyone?

On Thursday, September 23, 2021 at 1:32:36 PM UTC-4 [email protected] wrote:

> I have been troubled by this for quite some time without finding out the 
> reason.  I will describe a simple test case and will give the reasons for 
> why I need to do it this way.  I would appreciate if all the good folks 
> that spend their time to help others could just assume that the scenario is 
> valid and not question it too long.
>
> I have a shared library groovy called vars/testBuild.groovy as follow:
>
> *import* org.slf4j.*
>
> *def* call() {
>
>        *final* Logger logger = LoggerFactory.*getLogger*
> ('org.biouno.unochoice.extra')
>
>        *pipeline* {
>
>               *agent* *any*
>
>               *stages* {
>
>                      *stage*('My stage') {
>
>                            *steps* {
>
>                                   *echo* "I ran"
>
>                            }
>
>                      }
>
>               }
>
>        }
>
> }
>
>  
>
> I have a Jenkinsfile with the following content:
>
>  
>
> testBuild()
>
>  
>
> Jenkins has no issues building this and the echo step runs with no problem 
> and outputs: I ran.
>
> I need to move the pipeline for this case in a method called say 
> myPipeline.  I need to do this because in my real life use case, I actually 
> have a switch statement with several pipeline definitions in my call method 
> and I have reached Jenkins CPS limitation of the size of the bytecode must 
> not exceed 64K.  So I am left with the choice to define each of my pipeline 
> in their own methods.  When I change the testBuild.groovy as follows:
>
>  
>
> *import* org.slf4j.*
>
> *def* call() {
>
>        *final* Logger logger = LoggerFactory.*getLogger*
> ('org.biouno.unochoice.extra')
>
>        myPipeline()
>
> }
>
> *def* myPipeline() {
>
>        *final* Logger logger = LoggerFactory.*getLogger*
> ('org.biouno.unochoice.extra')
>
>        *pipeline* {
>
>               *agent* *any*
>
>               *stages* {
>
>                      *stage*('My stage') {
>
>                            *steps* {
>
>                                   *echo* "I ran"
>
>                            }
>
>                      }
>
>               }
>
>        }
>
> }
>
>  
>
> I get the following error from Jenkins:
>
>  
>
> hudson.remoting.ProxyException: groovy.lang.MissingPropertyException: No 
> such property: any for class: testBuild
>
>         at 
> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53)
>
>         at 
> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.getProperty(ScriptBytecodeAdapter.java:458)
>
>         at 
> com.cloudbees.groovy.cps.sandbox.DefaultInvoker.getProperty(DefaultInvoker.java:39)
>
>         at 
> com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:20)
>
>         at testBuild.myPipeline(testBuild.groovy:9)
>
>         at 
> org.jenkinsci.plugins.pipeline.modeldefinition.ModelInterpreter.call(ModelInterpreter.groovy:60)
>
>         at testBuild.myPipeline(testBuild.groovy:8)
>
>         at testBuild.call(testBuild.groovy:4)
>
>         at WorkflowScript.run(WorkflowScript:1)
>
>  
>
> The other interesting fact is that when I change the pipeline as follow 
> (with no additional method):
>
> *import* org.slf4j.*
>
> *def* call() {
>
>        *final* Logger logger = LoggerFactory.*getLogger*
> ('org.biouno.unochoice.extra')
>
>        *def* cl = {
>
>               *agent* *any*
>
>               *stages* {
>
>                      *stage*('My stage') {
>
>                            *steps* {
>
>                                   *echo* "I ran"
>
>                            }
>
>                      }
>
>               }
>
>        }
>
>        *pipeline* cl
>
> }
>
>  
>
> I get the following similar result:
> hudson.remoting.ProxyException: groovy.lang.MissingPropertyException: No 
> such property: any for class: testBuild        at 
> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53)
>         
> at 
> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.getProperty(ScriptBytecodeAdapter.java:458)
>         
> at 
> com.cloudbees.groovy.cps.sandbox.DefaultInvoker.getProperty(DefaultInvoker.java:39)
>         
> at 
> com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:20)
>         
> at testBuild.call(testBuild.groovy:5)        at 
> org.jenkinsci.plugins.pipeline.modeldefinition.ModelInterpreter.call(ModelInterpreter.groovy:60)
>         
> at testBuild.call(testBuild.groovy:14)        at 
> WorkflowScript.run(WorkflowScript:1) 
>
>  
>
> I know this is related to closures, delegates and DSL.  I tried to add the 
> following two lines just before the pipeline cl call:
>
>        cl.delegate = pipeline
>
>        cl.resolveStrategy = Closure.*DELEGATE_FIRST*
>
>  
>
> and the error reports no property any for class 
> org.jenkinsci.plugins.pipeline.modeldefinition.ModelInterpreter
>
> Can anyone tell me how I can have the pipeline define in the method 
> myPipeline?
>

-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-users/f520bdd9-c235-406f-8bae-053579d172e5n%40googlegroups.com.

Reply via email to