我有一个cloudbuild文件,它使用helm package {service}
命令在部署前打包一个图表文件。我的意图是将cloudbuild文件中的$COMMIT_SHA env值传递给Helm,这样我就可以将提交SHA添加到k8s部署的标签中。问题是,据我所知,$COMMIT_SHA仅在cloudbuild文件中可用。Helm只能访问values.yaml
和Chart.yaml
文件中的值。
我可能只是严重误解了什么,但我看不到任何前进的道路。我已经通读了helm和云构建文档。它们似乎暗示云构建可以使用环境变量来构建项目,但我不确定是否有任何方法可以将值从一个传递到另一个。
我认为您在这里的困惑是,您希望在helm install
或helm upgrade
命令上实现这一点,而不是在helm package
上实现。
如果不查看cloudbuild.yaml
文件,很难知道您的设置是什么样子的,但我想您有两个步骤,一个用于打包模板,另一个用于部署模板。
因此,在部署步骤中,您可以执行以下操作将$COMMIT_SHA
传递到图表:
helm upgrade {chart-name} {folder} --install
--set kubernetes.deployment.label=$COMMIT_SHA
-f values.yaml
编辑:
在对cloudbuild步骤有了更多了解之后,在实际打包图表之前,似乎必须完成您想要实现的目标。
由于管道正在从中央存储库下载模板文件,您稍后将使用该存储库来生成包,因此您需要介于两者之间的步骤,将$COMMIT_SHA作为标签添加到部署中。
想象一下,您的deployment.yaml
文件中有这样的内容:
apiVersion: apps/v1
kind: Deployment
metadata:
name: <name>
namespace: <namespace>
labels:
foo: placeholder
然后,您希望标签foo
的值为$COMMIT_SHA
,而不是占位符,在运行helm package
之前,您必须运行以下内容:
sed -i 's/placeholder/$COMMIT_SHA/g' deployment.yaml
因此,使用这种方法,每次触发管道时,您都会通过添加$COMMIT_SHA
来动态生成不同版本的图表,正如您最初提到的那样。