web-dev-qa-db-ja.com

Jenkinsプラグインのパイプラインユーティリティの手順からreadYAMLメソッドを使用してJenkinsパイプラインでYAMLファイルを解析する方法

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"
        }
   }

これを正しく機能させてエラーを取り除くにはどうすればよいですか?

前もって感謝します。

3
Ceesiebird

最も便利なのは、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}"
0
cherusk