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

Azure Pipeline同一流水线多次checkout同一仓库报相同键已添加如何解决

问题根源

Azure DevOps YAML流水线在编译解析阶段,会自动将所有checkout步骤中引用的远程仓库注册为流水线资源,同一个仓库重复注册时就会触发你遇到的报错:

An error occurred while loading the YAML build pipeline. An item with the same key has already been added.

该错误是YAML预校验阶段触发,和运行期agent的实际拉取行为无关。

可行解决方案

以下两种方案都可以满足多隔离环境agent独立拉取代码的需求:

方案1:主流水线前置声明仓库资源(优先推荐)

改动最小,无需调整原有流水线的阶段、作业结构:

  1. 在主azure-pipelines.yml的最顶部(trigger节点上方)添加全局资源声明,提前注册需要拉取的仓库并设置固定别名:
resources:
  repositories:
  - repository: srcRepo
    type: git
    name: xxxxx/yyyyy # 和你原有checkout语句中的仓库路径保持一致
trigger:
  none
# 原有参数、阶段配置保持不变
  1. 修改Procedures/Common.yml中的checkout步骤,直接引用提前声明的别名即可,不会触发重复资源注册:
steps:
- checkout: srcRepo # 替换原有git://开头的仓库路径
  ref: $(Build.SourceBranchName)
  clean: true
  enabled: true
  timeoutInMinutes: 1
# 后续Python版本选择、依赖安装步骤保持不变

方案2:自定义独立检出路径

如果不想添加全局资源声明,也可以通过给每个checkout指定全局唯一的检出路径避免冲突:
修改Procedures/Common.yml的checkout步骤,添加path参数,使用流水线内置的唯一变量保证路径不重复:

steps:
- checkout: git://xxxxx/yyyyy@$(Build.SourceBranchName)
  path: $(System.JobId) # 每个Job的ID全局唯一,不会出现路径冲突
  clean: true
  enabled: true
  timeoutInMinutes: 1
# 后续步骤保持不变

采用该方案需要同步调整Procedures/Export.yml中Python脚本的路径,代码会被检出到$(Agent.BuildDirectory)/$(System.JobId)目录下,修改scriptPath参数匹配对应路径即可。

一键多环境部署优化

如果你需要一次触发同时完成多个vLAN的部署,直接删除主流水线中两个stage的condition判断即可,两个环境的stage会并行执行,无需用户手动选择参数,完全符合你简化操作的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:36:03