如何在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
相关产品推荐
相关产品推荐

