2017-03-31 439 views
4

在Groovy中编写/修改* .yaml文件的最佳方法是什么?在jenkins中使用groovy编写yaml文件

我想修改我的jenkins管道作业中的yaml文件中维护的版本。随着readYaml我可以得到的内容,但我怎么能再写回来?

我想到的一种方法是在文件上执行sed。但我认为那不是很准确。

+0

的可能的复制[常规负载YAML文件修改和它在一个文件中写入(http://stackoverflow.com/questions/34668930/groovy-load-yaml-file-modify-and-write-it在文件中) – Rao

+0

恕我直言,它不是重复的,因为它不等同于Jenkins插件的readYaml方法 – dhpizza

+0

最近jenkins插件名为“Pipeline utility steps”,它包含'readYaml'(将yaml文件读入对象),和'writeYaml',它将一个对象作为yaml文件写下来。 –

回答

0

如果您只需要更新yaml文件中的版本,那么您可以只读内容,做一个String替换并回写到您的文件。

举个例子,这里有一个单元测试说明了这一点:

假设src/test/resources包含一个文件version.yaml,看起来像:

version: '0.0.1' 

anotherProperty: 'value' 

@Test 
void replaceVersion() { 
    File yaml = new File("src/test/resources/version.yaml") 
    println yaml.text 

    String newVersion = "2.0.0" 
    yaml.text = yaml.text.replaceFirst(/version: '.*'/, "version: '${newVersion}'") 
    println yaml.text 
} 
1

Pipeline Utility Steps插件有readYamlwriteYaml与YAML文件交互的步骤。默认情况下,writeYaml不会覆盖您的文件,因此您必须先将其删除。

def filename = 'values.yaml' 
def data = readYaml file: filename 

// Change something in the file 
data.image.tag = applicationVersion 

sh "rm $filename" 
writeYaml file: filename, data: data