如何使用 Pipeline Utility Steps 插件更新现有 yaml 文件的内容
Posted
技术标签:
【中文标题】如何使用 Pipeline Utility Steps 插件更新现有 yaml 文件的内容【英文标题】:How to update the content of an existing yaml file with Pipeline Utility Steps plugin 【发布时间】:2019-10-28 01:13:18 【问题描述】:在我的 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 文件的内容?
【问题讨论】:
***.com/questions/43140974/… write yaml file in jenkins with groovy的可能重复 一个好的答案在这里:***.com/questions/43140974/… 【参考方案1】:看起来您需要在覆盖之前删除或重命名原始文件,因为 writeYaml 方法没有覆盖标志。
sh '''
if [ -e Version.yaml ]; then
rm -f Version.yaml
fi
'''
【讨论】:
【参考方案2】:根据最新的文档。有一个参数可以用来覆盖指定文件的内容:
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
【讨论】:
以上是关于如何使用 Pipeline Utility Steps 插件更新现有 yaml 文件的内容的主要内容,如果未能解决你的问题,请参考以下文章
21-Jenkins-Pipeline-Pipeline Utility Steps插件之findFiles方法
23-Jenkins-Pipeline-Pipeline Utility Steps插件之readProperties方法
如何使用 JSON Utility 读取键中带有连字符的对象?