使用Jenkins的readYaml、writeYaml工具时YAML前置空格丢失如何解决?
Jenkins使用readYaml/writeYaml更新YAML丢失格式的解决方法
问题根因
- Jenkins Pipeline 内置的
writeYaml步骤基于SnakeYAML实现,默认缩进配置、引号处理规则不符合常规YAML书写规范,导致输出格式错乱 - 手动给字段值添加引号的操作会导致二次转义,进一步加剧格式异常
修复方案
方案1:调整writeYaml参数(无需额外工具)
修改你的Pipeline代码如下:
def yamlDev = readYaml file: "requirements.yaml" yamlDev.dependencies.each{ if (it.name.equals('value')) // 移除手动添加的双引号,交给writeYaml统一处理 it.version = "<=${Version.toString()}" } sh "rm requirements.yaml" // 新增indent指定缩进为2,quoteChar指定字符串用双引号包裹 writeYaml file: 'requirements.yaml', data: yamlDev, indent: 2, quoteChar: '"'
方案2:使用yq工具修改(兼容性更强,不会破坏原有格式)
如果调整参数后仍有格式问题,建议直接使用yq命令行工具修改YAML,无需经过Jenkins的序列化/反序列化步骤,完全保留原有格式:
sh """ yq e '.dependencies[] |= (select(.name == "value") | .version = "<=${Version.toString()}")' -i requirements.yaml """
注:使用该方案需要提前在Jenkins执行节点上安装yq工具
内容的提问来源于stack exchange,提问作者aymen0406
相关产品推荐
相关产品推荐

