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

能否在helm install/upgrade时展开values.yaml中的环境变量?

解决方法:Helm本身不会自动展开values.yaml中的环境变量,需前置处理

Helm默认会把values.yaml当作静态配置文件处理,不会主动解析其中的环境变量。要实现把环境变量配置移到values.yaml的需求,得在执行helm install/helm upgrade之前,先让Shell或Jenkins完成变量替换,生成包含实际值的配置文件后再传给Helm。以下是两种实用方案:

  • 用envsubst命令预处理values.yaml
    这是最常用的方式。先在values.yaml里用${环境变量名}的格式标记需要替换的变量,比如:

    app:
      replicaCount: ${REPLICA_COUNT}
      imageTag: ${IMAGE_TAG}
    

    然后在Jenkins的bash脚本里先处理配置文件,再执行Helm命令:

    # 生成替换了环境变量的配置文件
    envsubst < values.yaml > values-resolved.yaml
    # 执行安装
    helm install my-app ./my-chart -f values-resolved.yaml
    # 或者执行升级
    helm upgrade my-app ./my-chart -f values-resolved.yaml
    

    注意:如果values.yaml里有非环境变量的$符号(比如某些模板语法),可以指定只替换特定变量避免误处理,比如:

    envsubst '${REPLICA_COUNT},${IMAGE_TAG}' < values.yaml > values-resolved.yaml
    
  • 在Jenkinsfile中直接做变量替换
    如果是在Jenkins Pipeline的Groovy脚本里,也可以直接读取values.yaml内容,手动替换变量后写入临时文件:

    def valuesContent = readFile 'values.yaml'
    def processedValues = valuesContent.replace('${REPLICA_COUNT}', env.REPLICA_COUNT)
                                       .replace('${IMAGE_TAG}', env.IMAGE_TAG)
    writeFile file: 'values-resolved.yaml', text: processedValues
    sh 'helm install my-app ./my-chart -f values-resolved.yaml'
    

    这种方式更可控,适合变量数量不多的场景。

核心逻辑就是先让环境变量在Shell或Jenkins层面完成替换,生成包含实际值的配置文件后,再交给Helm使用,Helm本身不具备自动解析values.yaml中环境变量的能力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:55:25