You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins中writeYaml无法覆盖YAML文件hash值问题求助

问题:用GIT_COMMIT覆盖YAML中的hash值失败

原始YAML结构

transfers:
- name: xyz
  cloud: aws
  subheading:
    impact: Low
    reason: ---

  artifacts:
  - name: name1
    type: type1
    source:
      hash: a1b2C3dd4    # 待覆盖的值

需求

需要用Jenkins环境变量GIT_COMMIT的最新值,替换上述YAML文件中source节点下的hash字段值。

尝试的错误代码

按照相关方法编写的Groovy代码,但执行后hash值始终未变化:

def filename = ('path/to/file.yaml')
def datas = readYaml file: filename
//修改hash值
datas.transfers['artifacts'].source.hash[0][0] = env.GIT_COMMIT
writeYaml file: filename, data: datas, overwrite: true

问题根源

代码对YAML结构的访问路径完全错误:

  • transfers是数组类型(YAML中-代表数组元素),必须通过索引访问第一个元素,即transfers[0]
  • artifacts同样是数组,需要访问第一个元素artifacts[0]
  • hash是普通字符串字段,不需要额外的[0][0]索引,直接赋值即可

修正后的代码

def filename = 'path/to/file.yaml'
def datas = readYaml file: filename
// 正确遍历结构:取transfers第一个元素 → 取artifacts第一个元素 → 修改source下的hash
datas.transfers[0].artifacts[0].source.hash = env.GIT_COMMIT ?: 'testHash123'
writeYaml file: filename, data: datas, overwrite: true

补充说明

  • 代码中?: 'testHash123'是兜底逻辑,防止GIT_COMMIT环境变量为空时出现赋值异常
  • 执行后YAML中的hash值会被成功替换为目标值

内容的提问来源于stack exchange,提问作者awesomness03

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 02:57:29