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

Azure发布流水线中sed修改values.yaml后Helm upgrade未生效

Azure Release Pipeline中sed修改Helm values.yaml后未持久化的问题解决

问题场景

在Azure Release Pipeline中部署微服务Helm Chart到K8s集群时,使用sed命令匹配模式修改values.yaml内的resources请求和限制值:

  • 本地测试sed命令有效
  • Pipeline的Bash任务执行后,用cat检查文件显示修改正确
  • 但helm upgrade任务执行后,文件恢复为原版本,路径验证无误
  • 改用echo方式修改文件则能正常生效

原values.yaml配置块

resources: 
   limits:
     cpu: 4000m
     memory: 4000Mi
   requests:
     cpu: 2000m
     memory: 1500Mi

执行的原始sed命令

sed -e '/limits:/,/requests:/ s/\(cpu: \)[^ ]*/\12000m/' \
    -e '/limits:/,/requests:/ s/\(memory: \)[^ ]*/\12000Mi/' \
    -e '/requests:/,/limits:/ {s/\(cpu: \)[^ ]*/\1900m/; s/\(memory: \)[^ ]*/\1900Mi/;}' values.yaml

期望修改结果

resources: 
   limits:
     cpu: 2000m
     memory: 2000Mi
   requests:
     cpu: 900m
     memory: 900Mi

问题原因

sed命令默认仅将修改结果输出到标准输出,不会直接修改原文件。本地测试时可能习惯添加-i参数,但Pipeline中的命令遗漏了该参数,导致修改仅在临时输出中生效,并未写入原文件,因此helm upgrade读取的仍是未修改的原始配置。

解决方法

给sed命令添加-i参数(原地编辑文件的参数),修改后的命令如下:

sed -i -e '/limits:/,/requests:/ s/\(cpu: \)[^ ]*/\12000m/' \
    -e '/limits:/,/requests:/ s/\(memory: \)[^ ]*/\12000Mi/' \
    -e '/requests:/,/limits:/ {s/\(cpu: \)[^ ]*/\1900m/; s/\(memory: \)[^ ]*/\1900Mi/;}' values.yaml

添加-i后,sed会直接修改values.yaml文件,修改结果被持久化,后续helm upgrade即可读取到正确的配置。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 08:43:22