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

Jenkins Pipeline中使用yq命令更新YAML文件时strenv报错求助

解决Jenkins Pipeline中yq修改YAML列表的报错问题

报错原因

你当前使用的是基于jq的旧版yq(比如python-yq),而strenv()是Go语言实现的新版mikefarah/yq特有的环境变量读取函数,旧版yq依赖的jq本身没有这个函数,因此触发报错。

解决方案

方案一:使用新版mikefarah/yq(推荐)

如果Jenkins环境允许安装或切换到mikefarah/yq,直接调整命令即可。新版yq支持env()或strenv()读取环境变量,命令写法如下:

sh "INPUT1=$Input1 INPUT2=$Input2 yq -i '.cluster.list[env(INPUT2)] += env(INPUT1)' sample.yaml"

或者保留你原来的变量名写法:

sh "a=$Input1 b=$Input2 yq -i '.cluster.list[strenv(b)] += strenv(a)' sample.yaml"

执行后,Input1的值会被追加到cluster.list下对应Input2指定的列表中(比如Input2=k1时,追加到k1的列表)。

方案二:适配旧版python-yq(无法更换yq版本时)

旧版python-yq依赖jq,需要用jq的--arg参数传递变量,同时要将待添加的元素包装为数组(避免字符串被拆分成单个字符),命令修改为:

sh "yq -i --arg input1 '$Input1' --arg input2 '$Input2' '.cluster.list[$input2] += [$input1]' sample.yaml"
  • --arg input1 '$Input1':将Jenkins的Input1值传递给jq的$input1变量
  • [$input1]:确保添加的是单个元素而非字符数组
  • $input2:直接引用jq变量定位到目标列表节点

验证示例

假设Input1=n3,Input2=k1,执行命令后sample.yaml的k1列表会更新为:

k1:
- n11
- n2
- n3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:15:51