如何将Cloud Build变量传入Helm values中?
把Cloud Build的COMMIT_SHA传给Helm的几种实用方法
直接给你几个在实际项目里验证过的可行方案:
方法一:用Helm的--set参数直接注入
这是最简单直接的方式,在Cloud Build的helm命令里通过--set把环境变量传进去就行。比如你的cloudbuild.yaml步骤可以这么写:
steps: # 打包Chart时传递COMMIT_SHA - name: 'gcr.io/cloud-builders/helm' args: ['package', './your-service-chart', '--set', 'commitSha=$COMMIT_SHA'] # 如果是部署阶段(install/upgrade)传递 - name: 'gcr.io/cloud-builders/helm' args: ['upgrade', '--install', 'your-release-name', './your-service-chart', '--set', 'commitSha=$COMMIT_SHA']
然后在K8s Deployment模板(templates/deployment.yaml)里引用这个值:
metadata: labels: app: {{ .Values.appName }} commit-sha: {{ .Values.commitSha }} # 这里就是传递过来的COMMIT_SHA
方法二:生成临时values文件传递
如果要传多个变量,或者不想在命令行里暴露参数,可以先在Cloud Build里生成一个临时values文件,再让Helm加载它:
steps: # 生成临时values文件,写入COMMIT_SHA - name: 'ubuntu' args: ['bash', '-c', 'echo "commitSha: $COMMIT_SHA" > ./tmp-values.yaml'] # 打包时指定这个临时文件 - name: 'gcr.io/cloud-builders/helm' args: ['package', './your-service-chart', '-f', './tmp-values.yaml']
Deployment模板里的引用和上面一致,用{{ .Values.commitSha }}即可。
方法三:绑定到Chart的应用版本(可选)
如果想把提交SHA和Chart的应用版本绑定,可以直接修改Chart.yaml里的appVersion字段:
steps: # 替换Chart.yaml里的appVersion为COMMIT_SHA - name: 'ubuntu' args: ['bash', '-c', 'sed -i "s/appVersion: .*/appVersion: $COMMIT_SHA/" ./your-service-chart/Chart.yaml'] # 正常打包Chart - name: 'gcr.io/cloud-builders/helm' args: ['package', './your-service-chart']
然后在Deployment模板里直接引用Chart的应用版本:
metadata: labels: commit-sha: {{ .Chart.AppVersion }}
注意点
--set参数的优先级高于values.yaml里的配置;- 临时values文件如果和原values.yaml有重复键,会覆盖原values的值;
- 方法三适合需要把提交SHA作为应用版本标识的场景。
内容的提问来源于stack exchange,提问作者flazzo
相关产品推荐
相关产品推荐

