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

如何在Helm模板中从JSON文件读取指定键的值

解决方案

1. 修正GitHub Actions的Secret导出步骤

原命令会将单引号写入JSON文件,导致后续Helm解析失败,需去掉包裹toJSON(secrets)的单引号:

steps:
  - name: export-secrets
    run: |
      echo ${{ toJSON(secrets) }} > gh-secrets.json

若担心echo的转义问题,也可以用printf更稳妥:

printf '%s' '${{ toJSON(secrets) }}' > gh-secrets.json

2. 修正Helm模板文件(templates/secrets.yaml)

需要解决拼写错误、JSON字符串解析、按key取值三个核心问题:

apiVersion: v1
kind: Secret
metadata:
  name: {{ .Release.Name }}-secret
# 若要直接存储明文(K8s会自动转base64),用stringData;若手动编码则用data
stringData:
    {{- # 先将JSON文件内容解析为Helm可操作的字典 }}
    {{- $parsedSecrets := $.Files.Get "gh-secrets.json" | fromJson }}
    {{- # 修正拼写错误:secrtes → secrets }}
    {{- range .Values.secrets }}
      {{ . }}: {{ index $parsedSecrets . | quote }}
    {{- end }}

关键说明

  • JSON解析:通过fromJson将读取到的JSON字符串转为字典对象,才能按key取值
  • 按key取值:用index $parsedSecrets .获取当前循环key对应的Secret值
  • YAML格式:quote确保值被正确包裹在双引号中,符合YAML语法规范
  • Secret字段选择:
    • stringData:直接写入明文,K8s会自动编码为base64存储(推荐,更易维护)
    • data:需手动对值做base64编码,可改为{{ index $parsedSecrets . | b64enc | quote }}

最终输出效果

修正后执行Helm模板渲染,会得到你期望的结果:

# Source: mktplc-catalog/templates/secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: release-name-secret
stringData:
      A: "a1"
      B: "b1"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:54:59