如何使用 Pipeline Utility Steps 插件更新现有 yaml 文件的内容
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[=11=](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.
在我的 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[=11=](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.