Jenkinsプラグイン「Pipeline Utility Steps」のreadYamlメソッドを使用して、JenkinsパイプラインでYAMLファイルを解析しようとしています。
フォーラムで、readYmlメソッドをパイプラインのノードブロックで呼び出す必要があることを読みました。
このreadYmlメソッドをいじる前に、私のパイプラインは問題なく動作しました。
しかし、パイプラインのノードブロックにreadYmlを追加すると、次のエラーが発生します。
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)
問題は実際にはノードブロックを編集した後なので、完全なパイプラインコードに飽きることはありません。
プラグインのreadYmlメソッドを呼び出す方法は次のとおりです。
pipeline {
agent {
node {
label 'lsrv9557.linux.rabobank.nl'
customWorkspace '/appl/jenkins/workdir'
datas = readYaml file: "manifest.yml"
}
}
これを正しく機能させてエラーを取り除くにはどうすればよいですか?
前もって感謝します。
最も便利なのは、javaISH文字列に基づいてテンプレートを作成しようとした後で、ベースのシェルスクリプトを操作することでした。
$ cat logic/pipelines/obfuscate.sh
#!/bin/bash
echo "${REQUEST}" | json2yaml > "${PARAM_FILE}"
次に、このPARAM_FILEからスクリプトでさらに読み取ります。
---
#!/bin/bash
# improvised dynamic extraction
SOME=`yq -r .scope.some $PARAM_FILE`
echo -n "${SOME}"