簡體   English   中英

如何使用Jenkins插件Pipeline Utility步驟中的readYAML方法在Jenkins管道中解析YAML文件

[英]How to parse YAML files in Jenkins pipeline using readYAML method from the Jenkins plugin Pipeline Utility Steps

我正在嘗試使用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"
        }
   }

如何使它正常工作並擺脫錯誤?

提前致謝。

我已經弄清楚了問題所在。

就像上面提到的那樣,調用插件在聲明性管道的節點塊中不起作用。

但是,僅將其放在步驟塊中也不起作用。

最后的解決方法是將其放在步驟塊中的腳本塊中。

        stage('Read YAML file') {
        steps {
            script{ datas = readYaml (file: 'manifest.yml') }
            echo datas.ear_file.deploy.toString()

        }
    }
}

請注意,回聲只是為自己驗證* .yml文件是否已正確解析。

最方便的是,在嘗試基於javaISH字符串進行模板化后,我可以使用基本的shell腳本。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM