【问题标题】:In Jenkins pipeline Groovy, how can I set a value as a quoted string in a YAML file?在 Jenkins 管道 Groovy 中,如何在 YAML 文件中将值设置为带引号的字符串?
【发布时间】:2021-04-01 01:29:16
【问题描述】:

我有以下代码可以更新 Yaml 文件中的值

import org.yaml.snakeyaml.Yaml

String version = "1.0.0"
def data = readYaml file: "Chart.yaml"
data.name = "myApp"
// The version needs to be in double-quotes
data.appVersion = "\"${version}\""
sh "rm Chart.yaml"
writeYaml file: "Chart.yaml", data: data
sh "cat Chart.yaml"

所以我需要Chart.yaml 文件

appVersion = "1.0.0"

但是,上面的代码用额外的单引号把它放在了上面。

appVersion = '"1.0.0"'

同样的结果

data.appVersion = '"'+version+'"'

如果我有这个

data.appVersion = "${version}" // just string interpolation in this case

那我当然明白了,没有引号

appVersion = 1.0.0

【问题讨论】:

  • 恐怕你必须在之后做一些魔术,因为 writeYaml 步骤不会改变标量样式(从我所见/读到的)。但是,您可以将其更改为 DOUBLE_QUOTED 标量样式(使用 NonCSP 并明确设置),但随后所有内容都将被双引号:"appVersion": "1.0.0"。不幸的是,您的 yaml 文件中的布尔值也将转换为 "name": !!bool "false"

标签: jenkins groovy yaml jenkins-pipeline jenkins-groovy


【解决方案1】:

这是我根据 Unforgetable631 的建议最终做的事情。

import org.yaml.snakeyaml.Yaml

String version = "1.0.0"
def data = readYaml file: "Chart.yaml"
data.name = "myApp"
// The version needs to be in double-quotes
data.appVersion = version
sh "rm Chart.yaml"
writeYaml file: "Chart.yaml", data: data
sh """
  cat Chart.yaml
  sed -i \"s/$version/\\"$version\\"/g\" Chart.yaml
  cat Chart.yaml
"""

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多