Reputation: 706
I am trying to parse YAML files in Jenkins pipeline using the readYaml method from the Jenkins plugin "Pipeline Utility Steps".
I read on the forums that the readYml method should be called in the node block of the pipeline.
Before tinkering with this readYml method my pipeline worked flawlessly.
But after adding readYml to my pipeline's node block I get the following error.
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 5: Expected to find someKey "someValue" @ line 5, column 14.
node {
^
1 error
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.GroovyShell.parseClass(GroovyShell.java:688)
at groovy.lang.GroovyShell.parse(GroovyShell.java:700)
at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.doParse(CpsGroovyShell.java:131)
at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.reparse(CpsGroovyShell.java:125)
at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(CpsFlowExecution.java:560)
at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.start(CpsFlowExecution.java:521)
at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:290)
at hudson.model.ResourceController.execute(ResourceController.java:97)
at hudson.model.Executor.run(Executor.java:421)
I won't bore you with the complete pipeline code since the issue is really after editing my node block.
The way I call the plugins readYml method is as follows.
pipeline {
agent {
node {
label 'lsrv9557.linux.rabobank.nl'
customWorkspace '/appl/jenkins/workdir'
datas = readYaml file: "manifest.yml"
}
}
How do I get this to work properly and get rid of the error?
Thanks in advance.
Upvotes: 7
Views: 43707
Reputation: 31
Most convenient was for mine to work with base shell scripts after trying to template based on the javaISH strings.
$ cat logic/pipelines/obfuscate.sh
#!/bin/bash
echo "${REQUEST}" | json2yaml > "${PARAM_FILE}"
Then reading from this PARAM_FILE in scripts further on:
---
#!/bin/bash
# improvised dynamic extraction
SOME=`yq -r .scope.some $PARAM_FILE`
echo -n "${SOME}"
Upvotes: 0
Reputation: 706
I have figured out what the issue was.
As the kind fellows above mentioned as well,calling the plugin won't work in a node block in a declaritive pipeline.
However, simply putting it in a step block also wasn't working.
The fix in the end was putting it in a script block within the step block.
stage('Read YAML file') {
steps {
script{ datas = readYaml (file: 'manifest.yml') }
echo datas.ear_file.deploy.toString()
}
}
}
note that the echo is just to verify for myself if the *.yml file was properly parsed.
Upvotes: 17