Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Jenkins pipeline: No such DSL method

With this code i got an error in Jenkins pipeline. I don`t get it why? Am I missing something?

node {    stage 'test'    def whatThe = someFunc('textToFunc')    {def whatThe2 = someFunc2('textToFunc2')} }   def someFunc(String text){     echo text     text } def someFunc2(String text2){     echo text2     text2 } 

Error:

java.lang.NoSuchMethodError: **No such DSL method 'someFunc'** found among [archive, bat, build, catchError, checkout, deleteDir, dir, echo, emailext, emailextrecipients, error, fileExists, git, input, isUnix, load, mail, node, parallel, properties, pwd, readFile, readTrusted, retry, sh, sleep, stage, stash, step, svn, timeout, timestamps, tool, unarchive, unstash, waitUntil, withCredentials, withEnv, wrap, writeFile, ws]         at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:124)         at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:117)         at groovy.lang.MetaClassImpl.invokeMethodOnGroovyObject(MetaClassImpl.java:1280)         at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1174)         at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1024)         at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:42)         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:15)         at WorkflowScript.run(WorkflowScript:4)         at ___cps.transform___(Native Method)         at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:55)         at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:106)         at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:79)         at sun.reflect.GeneratedMethodAccessor878.invoke(Unknown Source)         at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)         at java.lang.reflect.Method.invoke(Unknown Source)         at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)         at com.cloudbees.groovy.cps.impl.ClosureBlock.eval(ClosureBlock.java:40)         at com.cloudbees.groovy.cps.Next.step(Next.java:58)         at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:154)         at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:164)         at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:360)         at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$100(CpsThreadGroup.java:80)         at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:236)         at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:226)         at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:47)         at java.util.concurrent.FutureTask.run(Unknown Source)         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(Unknown Source)         at java.util.concurrent.FutureTask.run(Unknown Source)         at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)         at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)         at java.lang.Thread.run(Unknown Source)     Finished: FAILURE 
like image 881
Kayden Avatar asked Aug 11 '16 11:08

Kayden


People also ask

What is DSL method in Jenkins?

Job DSL was one of the first popular plugins for Jenkins which allows managing configuration as code and many other plugins dealing with this aspect have been created since then, most notably the Jenkins Pipeline and Configuration as Code plugins.

What is Jenkins Groovy DSL?

The Jenkins Job DSL enables the programmatic creation of Jenkins jobs using Groovy code. You can store this code in your Git repository and thus make changes traceable and generate Jenkins jobs automatically. The DSL is provided via the Job DSL Plugin and is documented in detail in the Job DSL API Viewer.

What are the steps to create a Jenkins pipeline?

Step 1: Log into Jenkins and select 'New item' from the dashboard. Step 2: Next, enter a name for your pipeline and select 'pipeline' project. Click on 'ok' to proceed. Step 3: Scroll down to the pipeline and choose if you want a declarative pipeline or a scripted one.

How are variables defined in Jenkins pipeline?

Jenkins pipeline environment variables: You can define your environment variables in both — global and per-stage — simultaneously. Globally defined variables can be used in all stages but stage defined variables can only be used within that stage. Environment variables can be defined using NAME = VALUE syntax.


1 Answers

remove the extra brackets from around the sumfunc2 invocation:

node {    stage 'test'    def whatThe = someFunc('textToFunc')    def whatThe2 = someFunc2('textToFunc2') }  def someFunc(String text){     echo text     text } def someFunc2(String text2){     echo text2     text2 } 

Update:

In Groovy if a method's last argument is of type Closure, then when calling the method the closure can be outside of the brackets like:

def foo(whatever, Closure c) {}  // Can be invoked as foo(whatever, {     // This is the second argument of foo of type Closure })  // It is also the same as writing foo(whatever) {     // This is the second argument of foo of type Closure } 

The reason that the original throws is because the following code

def whatThe = someFunc('textToFunc') {def whatThe2 = someFunc2('textToFunc2')} 

is the same code as

def whatThe = someFunc('textToFunc') {     def whatThe2 = someFunc2('textToFunc2') } 

This means that what the interpreter will be looking for is

someFunc(String text, Closure c) 

and there is no such method

like image 83
Gergely Toth Avatar answered Sep 20 '22 15:09

Gergely Toth