Azure devops 在Azure DevOps中使用--设置头盔覆盖列表值

Azure devops 在Azure DevOps中使用--设置头盔覆盖列表值,azure-devops,azure-pipelines,kubernetes-helm,Azure Devops,Azure Pipelines,Kubernetes Helm,如何在Azure DevOps中用--set param覆盖头盔列表中的值 values.yaml中的简单用例: environment: - name: foo value: override_me - name: bar value: override_me - name: baz value: override_me 在deployment.yaml文件中,我这样使用它: env: {{ toYaml .Values.env

如何在Azure DevOps中用--set param覆盖头盔列表中的值

values.yaml中的简单用例:

environment:
  - name: foo
    value: override_me
  - name: bar
    value: override_me
  - name: baz
    value: override_me
deployment.yaml
文件中,我这样使用它:

        env:      
{{ toYaml .Values.environment | indent 10}}
有一件事是这样的,但不是真的:

environment[0]。name=foo,environment[0]。value=hello,{…}

此重写的问题是,它将重写整个列表,即使我只想替换值
[0]
,而不是
[1]
[2]
。 此外,当我传递url:s或int(不在本地主机上,仅在AZ DevOps上)时,我也会遇到解析错误-为了克服该配对错误,您可以使用
\“
”将其转义-但随后图表会出错-即使它通过了验证


那么,在我的Azure DevOps helm部署中,有可能覆盖env列表吗?或者我需要将列表重新构造为单个
key=value
对吗?

在这样做时,我有一个奇怪的经历,在两个类似的情况下,一个情况下它替换了它们,另一个情况下覆盖了整个阵列。所以在第二个情况下,我必须做的是这样做s:

environment:
- name: v1
  value: keep_me
- name: v2
  value: keep_me
- name: v3
  value: keep_me
- name: foo
  value: override_me
- name: bar
  value: override_me
我在Azure Devops中这样做:

--set environment[3].name=foo,environment[03.value=xxx

对于另一个,我不必这样做,它很乐意只覆盖我输入的值。不知道为什么会这样做。

在任务中定义一些变量:

使用标准集:

我在一个发布管道中使用了一个bash任务,该任务指向一个deploy.sh文件,该文件作为已发布的工件存在


这就是我正在做的,但这将覆盖整个列表,当我想保留一些值时,如您用
保留我
值所示:/n不,注意我没有给它
[0]
,我给它
[3]
,以我的经验,它将只覆盖后面的值。因此,您要保留的值应该在列表的开头。我明白您的观点。但我敢打赌,如果我添加更多的env变量,并且忘记顺序非常重要,那么以后会导致问题。是的,这是真的。其他选项是直接使用som解析values.yamlething与powershellwell类似,它证实了您的发现并提供了一个解决方案;)