You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps YAML管道加载报错:重复键已添加问题求助

问题分析与解决

错误原因

你遇到的An error occurred while loading the YAML build pipeline. An item with the same key has already been added错误,核心原因是阶段名称重复。

你的嵌套循环逻辑会生成12个阶段(3个namespace × 2个DCR × 2个OSC),但你定义的阶段名称仅依赖namespace,这意味着同一个namespace(比如development)对应的4个阶段都会使用完全相同的名称deploy-"development"。Azure DevOps不允许管道中存在重复的阶段标识,因此触发报错。

另外还有两个小问题:

  • HELM_VALUES里的global.data_center=${{ DCR }}引用了大写的DCR参数,而非循环变量dcr,会导致取到整个数据中心数组而非当前循环的具体值。
  • 部署作业的displayName写死为Deploy to DCR1,无法区分不同数据中心的部署任务。

解决方案

修改阶段名称,将dcr和osc的信息纳入,确保每个阶段名称唯一。同时修正变量引用和显示名称的问题。

修改后的deploy-env.yaml

parameters:
  - name: OPENSHIFT_NAMESPACE
    displayName: 'OpenShift namespace'
    type: object
    values: []

  - name: DCR
    displayName: 'Data Center'
    type: object
    values: []

  - name: OSC
    displayName: 'Openshift service connection'
    type: object
    values: []

stages:
- ${{ each namespace in parameters.OPENSHIFT_NAMESPACE }}:
    - ${{ each dcr in parameters.DCR }}:
      - ${{ each osc in parameters.OSC }}:
        - stage: deploy-${namespace}-${dcr}-${osc}
          jobs:
          - deployment: deploy_to_${dcr}_${osc}
            environment: ${{ namespace }}
            displayName: 'Deploy to ${{ dcr }} (${{ osc }})'
            strategy:
              runOnce:
                deploy:
                  steps:
                    - template: steps/deploy_to_cluster_with_helm_templating.yml@pipeline_templates
                      parameters:
                        DATA_CENTER: ${{ dcr }}
                        OPENSHIFT_NAMESPACE: ${{ namespace }}
                        OPENSHIFT_SERVICE_CONNECTION: '${{ osc }}'
                        HELM_VALUES:
                          - 'global.namespace=${{ namespace }}'
                          - 'global.data_center=${{ dcr }}'

关键修改点

  1. 阶段名称改为deploy-${namespace}-${dcr}-${osc},确保每个组合的阶段名称唯一(比如deploy-development-dcr1-OCP4DCR1)。
  2. 部署作业名称改为deploy_to_${dcr}_${osc},避免潜在的作业名称重复问题。
  3. 修正HELM_VALUES中的变量引用为${{ dcr }},确保取到当前循环的具体数据中心值。
  4. 动态设置displayName为'Deploy to ${{ dcr }} (${{ osc }})',清晰展示部署目标。

内容的提问来源于stack exchange,提问作者Tony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 04:45:32