【问题标题】:write yaml file in jenkins with groovy用 groovy 在 jenkins 中编写 yaml 文件
【发布时间】:2017-08-25 17:49:35
【问题描述】:

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

我想在我的 jenkins 管道作业中修改 yaml 文件中维护的版本。用readYaml我可以得到内容,但是我怎么能把它写回来呢?

我想到的一种方法是在文件上写一个sed。但我认为这不是很准确。

【问题讨论】:

  • 恕我直言,它不是重复的,因为它不等同于 Jenkins 插件的 readYaml 方法
  • 最近的名为“Pipeline utility steps”的jenkins插件包含readYaml(将yaml文件读入对象)和writeYaml,它接受一个对象并将其写为yaml文件。

标签: jenkins groovy yaml jenkins-pipeline


【解决方案1】:

Pipeline Utility Steps 插件具有与 YAML 文件交互的 readYamlwriteYaml 步骤。 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

【讨论】:

  • 坦率地说这是救星:sh "rm $filename"
  • 这应该是答案。
  • 您应该考虑源文件被删除('sh "rm $filename"')并且程序在这种情况下强制停止数据丢失的情况。你永远不会相信 RAM。考虑在删除之前写入临时文件,然后删除源并重命名目标
【解决方案2】:

您可以使用“writeYaml”并将标志“overwrite”设置为true
这将允许对 YAML 文件进行更新。
默认情况下,它设置为 false。

您可以在Pipeline Utility Steps Documentation 中阅读更多相关信息

【讨论】:

    【解决方案3】:

    如果您只需要更新 yaml 文件中的版本,那么您只需读取内容,进行字符串替换并写回您的文件。

    作为一个例子,这里有一个单元测试来证明这一点:

    假设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
    }
    

    【讨论】:

    • 如果您不知道或不在乎要替换的字符串版本,则不会。
    猜你喜欢
    • 1970-01-01
    • 2021-11-30
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 2014-04-11
    • 2021-07-07
    相关资源
    最近更新 更多