I think with the declarative syntax all of the "scaffolding" (stages, post, 
when) bits have to be set in stone.

This recent thread might be slightly relevant
https://groups.google.com/forum/#!topic/jenkinsci-users/E-3O1rHWkdM

On Tuesday, April 3, 2018 at 11:14:51 PM UTC+1, Arnaud Brunet wrote:
>
> Hi guys,
>
> I try to make a pipeline script with dynamic stages.
>
> In static way, I do
>
> pipeline {
>   agent any
>   options {
>     timestamps()
>   }
>   stages {
>     stage('Init') {
>       steps {
>         script {
>           echo "TOTO"
>         }
>       }
>     }
>   }
> }
>
> but I want my stages to be dynamic, something like that :
>
> def jobStages = [
>   'init': {
>      echo "Init"
>   }
> ]
>
> pipeline {
>   agent any
>   options {
>     timestamps()
>   }
>   stages {
>     jobStages.each { name, closure ->
>       stage(name) {
>         steps {
>           script {
>             closure.call()
>           }
>         }
>       }
>     }
>   }
> }
>
> But Jenkins doesn't like it :
>
> /var/lib/jenkins/jobs/AXI-TEST-Pipeline 
> Script/builds/79/libs/jenkins-shared-libs/vars/standardBuild.groovy: 27: 
> Expected a stage @ line 27, column 13.
>                jobStages.each { name, closure ->
>                ^
>
> /var/lib/jenkins/jobs/AXI-TEST-Pipeline 
> Script/builds/79/libs/jenkins-shared-libs/vars/standardBuild.groovy: 26: No 
> stages specified @ line 26, column 9.
>            stages {
>            ^
>
> 2 errors
>
>       at 
> org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:310)
>       at 
> org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1085)
>       at 
> org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:603)
>       at 
> org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:581)
>       at 
> org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:558)
>       at 
> groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298)
>       at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268)
>       at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:254)
>       at groovy.lang.GroovyClassLoader.recompile(GroovyClassLoader.java:761)
>       at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:718)
>       at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:787)
>       at java.lang.ClassLoader.loadClass(ClassLoader.java:411)
>       at 
> org.jenkinsci.plugins.workflow.cps.CpsGroovyShell$TimingLoader.loadClass(CpsGroovyShell.java:160)
>       at java.lang.ClassLoader.loadClass(ClassLoader.java:411)
>       at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:677)
>       at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:787)
>       at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:775)
>       at 
> org.jenkinsci.plugins.workflow.cps.global.UserDefinedGlobalVariable.getValue(UserDefinedGlobalVariable.java:54)
>       at 
> org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:99)
>       at sun.reflect.GeneratedMethodAccessor500.invoke(Unknown Source)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>       at java.lang.reflect.Method.invoke(Method.java:483)
>       at 
> org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
>       at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
>       at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213)
>       at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
>       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 org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:157)
>       at 
> org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:23)
>       at 
> org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:133)
>       at 
> org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:120)
>       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:3)
>       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.GeneratedMethodAccessor232.invoke(Unknown Source)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>       at java.lang.reflect.Method.invoke(Method.java:483)
>       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$001(SandboxContinuable.java:19)
>       at 
> org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:35)
>       at 
> org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:32)
>       at 
> org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.java:108)
>       at 
> org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:32)
>       at 
> org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:174)
>       at 
> org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:331)
>       at 
> org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$200(CpsThreadGroup.java:82)
>       at 
> org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:243)
>       at 
> org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:231)
>       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 
> 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
>
>
> Is there a way to do this ?
>
> Regards,
> Arnaud.
>
>
>

-- 
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/f7729cb6-0f0c-4d9d-af82-ef857fe74a91%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to