In case of Shared Library classes definition, steps are not directly
callable (it's not the case for steps declared inside *vars* directory).

Can you can try something like :

*src/acme/jenkins/Utils.groovy*
package acme.jenkins

class Utils {
  static def getGradleBinPath(script, version) {
    if (!version) {
        throw new IllegalArgumentException('A Gradle version must be
provided')
    }
    script.tool(version).concat('/bin/gradle')
  }
}


*vars/runGradle.groovy*
import acme.jenkins.*

def call(body) {
    def config = [:]

    body.resolveStrategy = Closure.DELEGATE_FIRST
    body.delegate = config
    body()

    sh "${Utils.getGradleBinPath(this, config.version)} ${config.cmd}"
}


See https://jenkins.io/doc/book/pipeline/shared-libraries/#accessing-steps
=> there is a similar example using Maven.

Moreover, you should also be interested by
https://issues.jenkins-ci.org/browse/JENKINS-44834 and
https://issues.jenkins-ci.org/browse/JENKINS-27393 :-)

Hopefully it helps.

Cheers


2017-08-02 15:29 GMT+02:00 Nicolae Vlădescu <nicolae.vlade...@outlook.com>:

> Hello.
>
> I have the following issue with Jenkins 2.0
>
> My Jenkinsfile from repo X contains:
>
> @Library('acme-pipelines@dev')
>
> import acme.jenkins.*
>
> node {
> runGradle {
> version = '3.3'
> cmd = '--version'
> }
> }
>
>
>
> In repo Y (the pipeline library repo) i have `vars/runGradle.groovy`
> containing:
> import acme.jenkins.*
>
> def call(body) {
>     def config = [:]
>     def utils = new Utils()
>
>     body.resolveStrategy = Closure.DELEGATE_FIRST
>     body.delegate = config
>     body()
>
>     sh "${utils.getGradleBinPath(config.version)} ${config.cmd}"
> }
>
>
>
> Also in repo Y i have `src/acme/jenkins/Utils.groovy` containing:
> package acme.jenkins
>
> static String getGradleBinPath(String version = null) {
> if (!version) {
> throw new IllegalArgumentException('A Gradle version must be provided')
> }
> tool(version).concat('/bin/gradle')
> }
>
>
> When i run the pipeline i get this error:
>
> Running on master in /var/lib/jenkins/workspace/Jenkins Library 
> Development[Pipeline] {[Pipeline] }[Pipeline] // node[Pipeline] End of 
> Pipelinehudson.remoting.ProxyException: groovy.lang.MissingMethodException: 
> No signature of method: static softvision.jenkins.Utils.tool() is applicable 
> for argument types: (java.lang.String) values: [3.3]
> Possible solutions: wait(), run(), run(), find(), grep(), any()
>       at 
> groovy.lang.MetaClassImpl.invokeStaticMissingMethod(MetaClassImpl.java:1506)
>       at groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1492)
>       at 
> org.codehaus.groovy.runtime.callsite.StaticMetaClassSite.call(StaticMetaClassSite.java:53)
>       at 
> org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
>       at 
> org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
>       at 
> com.cloudbees.groovy.cps.sandbox.DefaultInvoker.methodCall(DefaultInvoker.java:18)
>       at 
> softvision.jenkins.Utils.getGradleBinPath(file:/var/lib/jenkins/jobs/Jenkins%20Library%20Development/builds/89/libs/softvision-pipelines/src/softvision/jenkins/Utils.groovy:7)
>       at runGradle.call(/var/lib/jenkins/jobs/Jenkins Library 
> Development/builds/89/libs/softvision-pipelines/vars/runGradle.groovy:11)
>       at WorkflowScript.run(WorkflowScript:6)
>       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.GeneratedMethodAccessor273.invoke(Unknown Source)
>       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.LocalVariableBlock$LocalVariable.get(LocalVariableBlock.java:39)
>       at 
> com.cloudbees.groovy.cps.LValueBlock$GetAdapter.receive(LValueBlock.java:30)
>       at 
> com.cloudbees.groovy.cps.impl.LocalVariableBlock.evalLValue(LocalVariableBlock.java:28)
>       at 
> com.cloudbees.groovy.cps.LValueBlock$BlockImpl.eval(LValueBlock.java:55)
>       at com.cloudbees.groovy.cps.LValueBlock.eval(LValueBlock.java:16)
>       at com.cloudbees.groovy.cps.Next.step(Next.java:74)
>       at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:154)
>       at 
> org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:18)
>       at 
> org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:33)
>       at 
> org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:30)
>       at 
> org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.java:108)
>       at 
> org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:30)
>       at 
> org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:165)
>       at 
> org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:330)
>       at 
> org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$100(CpsThreadGroup.java:82)
>       at 
> org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:242)
>       at 
> org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:230)
>       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:112)
>       at 
> jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
>       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:1142)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>       at java.lang.Thread.run(Thread.java:745)
> Finished: FAILURE
>
>
> This is the same error if i wrap the `getGradleBinPath` method in a class
> named `Utils`, with or without the `static` keyword prefix for the method,
> i also tried to implement Serializable when using the class version, but
> same error.
>
> If i remove the `static` keyword in the scripted version it works fine,
> all of the example code scenarios and above mentioned yield the same error.
>
> I'm pretty new to Groovy so please forgive me if this is not related to
> Jenkins, or very trivial.
>
> Thank you.
>
> --
> 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 jenkinsci-users+unsubscr...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/
> msgid/jenkinsci-users/6c8562f5-38cb-42cd-808f-c816d5022e75%40googlegroups.
> com
> <https://groups.google.com/d/msgid/jenkinsci-users/6c8562f5-38cb-42cd-808f-c816d5022e75%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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 jenkinsci-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-users/CAPO77c2Ak%3DLkVbdcGkHAVat%2BNED_ttoT4qt%2BPRazhpzvn7fdNg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to