通过GitHub Actions部署Argo Workflow时设置环境变量失败求助
问题
通过GitHub Actions部署Argo Workflow时,执行以下Helm命令生成工作流YAML文件:
- name: Generate argo workflow yaml file run: | helm template \ --set image.repository=${{ env.DOCKER_REPOSITORY }} \ --set image.tag=${TAG} \ --set env.TEST="TEST" \ -f backfill/helm/values.yaml $APP_NAME charts/job > workflow-dev.yaml
添加--set env.TEST="TEST"参数后出现如下错误:
msg="Failed to parse workflow: json: cannot unmarshal object into Go struct field Container.spec.templates.container.env of type []v1.EnvVar"
移除该参数部署正常,通过values.yaml设置环境变量也能正常运行,请问如何解决?
解决方案
问题出在--set env.TEST="TEST"的写法上:Helm会把这种格式解析成对象类型的env: {TEST: "TEST"},但Argo Workflow的容器env字段要求是数组类型(即env: [{name: "TEST", value: "TEST"}]),类型不匹配就会触发解析错误。
解决方法有两种:
- 使用Helm的数组语法指定环境变量
把--set env.TEST="TEST"改成:
若需要多个环境变量,依次增加索引即可:--set env[0].name=TEST,env[0].value="TEST"--set env[0].name=TEST,env[0].value="TEST",env[1].name=FOO,env[1].value="BAR" - 用
--values或-f加载额外的临时配置文件
在GitHub Actions里临时生成一个包含环境变量的小yaml文件(比如temp-env.yaml):
然后在Helm命令里加上这个文件:env: - name: TEST value: "TEST"
这种方式更直观,也不容易出错,适合多环境变量的场景。helm template \ --set image.repository=${{ env.DOCKER_REPOSITORY }} \ --set image.tag=${TAG} \ -f backfill/helm/values.yaml \ -f temp-env.yaml \ $APP_NAME charts/job > workflow-dev.yaml
内容的提问来源于stack exchange,提问作者gamer
相关产品推荐
相关产品推荐

