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

如何批量迁移Azure DevOps实例间项目的200+CI/CD管道?

批量迁移Azure DevOps CI/CD管道及文件夹的可行方案

方法一:通过Azure DevOps REST API实现全量迁移

步骤1:导出源实例的管道与文件夹结构

  • 调用API获取所有管道元数据:
    GET https://dev.azure.com/{源组织名}/{源项目名}/_apis/pipelines?api-version=7.1-preview.1
    
    该接口会返回所有管道的ID、名称、所在文件夹路径等信息。
  • 逐个获取管道完整定义:
    遍历每个管道ID,调用接口导出完整配置(YAML或经典管道的详细结构):
    GET https://dev.azure.com/{源组织名}/{源项目名}/_apis/pipelines/{管道ID}?api-version=7.1-preview.1
    
    将结果按文件夹路径分类保存,记录每个管道的归属路径。

步骤2:在目标实例创建对应文件夹层级

  • 按导出的文件夹路径,从父到子依次调用API创建文件夹:
    POST https://dev.azure.com/{目标组织名}/{目标项目名}/_apis/pipelines/folders?api-version=7.1-preview.1
    
    请求体示例:{"path": "/父文件夹/子文件夹"}

步骤3:批量导入管道到目标实例

  • 遍历保存的管道定义,调用导入接口:
    POST https://dev.azure.com/{目标组织名}/{目标项目名}/_apis/pipelines?api-version=7.1-preview.1
    
    请求体中包含管道名称、目标文件夹ID(可通过查询文件夹API获取)、完整定义内容。由于已提前创建同名服务连接,无需额外修改连接配置。

方法二:使用Azure DevOps CLI快速迁移(适合YAML管道为主的场景)

前期准备

  • 安装Azure DevOps CLI扩展:
    az extension add --name azure-devops
    
  • 配置源实例默认值:
    az devops configure --defaults organization=https://dev.azure.com/{源组织名} project={源项目名}
    

导出管道

  • 先获取所有管道ID列表,循环导出每个管道的YAML配置:
    for id in $(az pipelines list --query "[].id" -o tsv); do
      name=$(az pipelines show --id $id --query "name" -o tsv)
      folder=$(az pipelines show --id $id --query "folder" -o tsv)
      mkdir -p "./pipelines$folder"
      az pipelines show --id $id --output yaml > "./pipelines$folder/$name.yaml"
    done
    

导入管道到目标实例

  • 配置目标实例默认值:
    az devops configure --defaults organization=https://dev.azure.com/{目标组织名} project={目标项目名}
    
  • 先创建所有目标文件夹:
    find ./pipelines -type d | grep -v "^./pipelines$" | while read dir; do
      folder_path=${dir#./pipelines}
      az pipelines folder create --path "$folder_path" --yes
    done
    
  • 循环导入YAML管道:
    find ./pipelines -name "*.yaml" | while read file; do
      folder_path=$(dirname "$file" | sed 's/^./pipelines//')
      name=$(basename "$file" .yaml)
      az pipelines create --name "$name" --folder-path "$folder_path" --yaml-path "$file" --yes
    done
    

方法三:PowerShell脚本自动化(支持经典+YAML混合管道)

编写PowerShell脚本实现端到端迁移,核心逻辑包括:

  • 用PAT(个人访问令牌)完成源/目标实例的身份认证
  • 递归获取源实例的所有文件夹和管道信息
  • 在目标实例批量创建文件夹结构
  • 逐个导入管道定义,经典管道需保留变量、触发器、任务配置等细节

关键注意事项

  • PAT权限:源实例需授予Build (Read)权限,目标实例需授予Build (Edit)权限
  • 依赖检查:经典管道迁移前,确认目标实例已安装所有用到的自定义任务,变量组需提前同步
  • 资源引用:YAML管道需确保仓库、模板等资源在目标实例已存在,服务连接名称与源一致
  • 测试验证:迁移完成后,选取不同文件夹下的管道测试运行,确认配置生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:30:56