Hello everybody,
Recently the saltstack plugin was updated for pipeline support. In working
this up, it was important to not just print the return to the console, but
to return the value in case it might be needed for further processing. The
syntax for doing this looks something like:
stage("run salt") {
node("agent1") {
saltresult = salt authtype: 'pam', clientInterface: local(arguments:
'"sleep 5; tail -1 /etc/hosts"', blockbuild: true, minionTimeout: 32, function:
'cmd.run', jobPollTime: 7, target: '*', targetType: 'glob'), credentialsId:
'b5f40401-01b9-4b27-a5e8-8ae94bc90250', servername: 'http://localhost:8000'
echo saltresult
}
}
This seems to work well, except in the case of the newly released
declarative pipeline syntax. I think the syntax for this would be something
like:
pipeline {
agent {label 'agent1'}
stages {
stage('run salt') {
steps {
output = salt authtype: 'pam', clientInterface:
local(arguments: '"sleep 5; ls -la"', function: 'cmd.run', jobPollTime: 16,
target: '*', targettype: 'glob'), credentialsId:
'b5f40401-01b9-4b27-a5e8-8ae94bc90250', servername: 'http://localhost:8000'
echo output
}
}
}
}
Unfortunately this results in an error:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 6: Expected a step @ line 6, column 17.
output = salt authtype: 'pam', clientInterface:
local(arguments: '"sleep 5; ls -la"', function: 'cmd.run', jobPollTime: 16,
target: '*', targettype: 'glob'), credentialsId:
'b5f40401-01b9-4b27-a5e8-8ae94bc90250', servername: 'http://localhost:8000'
^
1 error
at
org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:310)
at
org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1073)
at
org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:591)
at
org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:569)
at
org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:546)
at
groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298)
at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268)
at groovy.lang.GroovyShell.parseClass(GroovyShell.java:688)
at groovy.lang.GroovyShell.parse(GroovyShell.java:700)
at
org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.reparse(CpsGroovyShell.java:67)
at
org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(CpsFlowExecution.java:430)
at
org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.start(CpsFlowExecution.java:393)
at
org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:238)
at hudson.model.ResourceController.execute(ResourceController.java:98)
at hudson.model.Executor.run(Executor.java:410)
It looks like the error can be avoided by dropping the variable assignment
'output =' bit, however this then makes it impossible to see/print/parse
the return from the plugin. Adding in pipeline support made aspects of the
plugin much easier, as previously it supported replacing templated options
with environment variables (as to support parameterized builds) and saving
the salt output into an environment variable. But by supporting pipeline,
this all becomes available for free as you can pass in groovy variables and
save the return output. However, with the declarative syntax, it again
complicates things with its simplicity. How should this be handled?
Thanks much
--
You received this message because you are subscribed to the Google Groups
"Jenkins Developers" 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-dev/9191d5b4-cc7f-4c9b-86b6-891b72235105%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.