![](/img/trans.png)
[英]How to parse YAML files in Jenkins pipeline using readYAML method from the Jenkins plugin Pipeline Utility Steps
[英]How to update the content of an existing yaml file with Pipeline Utility Steps plugin
在我的 jenkins 管道中,我正在使用Pipeline Utility Steps插件讀取存儲在 yaml 文件中的數據
我可以從文件中讀取數據,現在我想更新值並將其寫回文件,如下所示:
pipeline {
agent any
stages {
stage('JOb B ....'){
steps{
script{
def datas = readYaml file:"${WORKSPACE}/Version.yml"
echo datas.MAJOR_VERSION //output is 111
datas = ['MAJOR_VERSION': '222']
writeYaml file:"${WORKSPACE}/Version.yml", data: datas
}
}//steps
}//stage
}//stages
}//pipeline
但我收到錯誤 - Version.yml 已經存在:
java.nio.file.FileAlreadyExistsException: /var/lib/jenkins/workspace/t-cicd-swarm-example_hdxts-job-B/Version.yml already exist.
at org.jenkinsci.plugins.pipeline.utility.steps.conf.WriteYamlStep$Execution.run(WriteYamlStep.java:175)
at org.jenkinsci.plugins.pipeline.utility.steps.conf.WriteYamlStep$Execution.run(WriteYamlStep.java:159)
at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:47)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Finished: FAILURE
它似乎只能寫入一個新文件,而不能覆蓋現有文件。 如何從上面顯示的腳本更新現有 yaml 文件的內容?
看起來您需要在覆蓋之前刪除或重命名原始文件,因為 writeYaml 方法沒有覆蓋標志。
sh '''
if [ -e Version.yaml ]; then
rm -f Version.yaml
fi
'''
根據最新文檔。 有一個參數可以用來覆蓋指定文件的內容:
writeYaml: Write a yaml from an object.
...
overwrite (optional): Allow existing files to be overwritten. Defaults to false.
請參考: https : //www.jenkins.io/doc/pipeline/steps/pipeline-utility-steps/#writeyaml-write-a-yaml-from-an-object
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.