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

如何检索Develop分支应用相同branch policy的Azure DevOps仓库列表?

批量查询Azure DevOps中Develop分支配置指定分支策略的仓库

核心思路

通过Azure DevOps REST API分阶段遍历资源:组织→项目→仓库→分支策略,最后筛选出匹配目标策略的仓库。以Build Validation策略为例,它的固定策略类型ID是0609b952-1397-4640-95ec-e00a01b2c241,其他策略的类型ID可通过查询全量策略配置获取。

步骤详解

1. 准备必要信息

  • Azure DevOps组织URL:例如https://dev.azure.com/your-org-name
  • 个人访问令牌(PAT):需授予**代码(读取)和分支策略(读取)**权限,有效期按需设置
  • 目标分支名:这里是Develop(注意大小写敏感,Azure DevOps分支名区分大小写)

2. API调用流程

第一步:获取组织下所有项目

调用Projects API拿到所有项目的ID和名称:

GET https://dev.azure.com/{organization}/_apis/projects?api-version=7.1-preview.4&$top=100

若项目数量超过100,需通过continuationToken参数处理分页,循环拉取剩余数据。

第二步:遍历项目,获取每个项目的仓库列表

对每个项目,调用Repos API拿到仓库ID和名称:

GET https://dev.azure.com/{organization}/{projectId}/_apis/git/repositories?api-version=7.1-preview.1&$top=100
第三步:遍历仓库,获取Develop分支的分支策略

对每个仓库,调用Branch Policies API,指定仓库ID和分支名:

GET https://dev.azure.com/{organization}/{projectId}/_apis/policy/configurations?api-version=7.1-preview.1&repositoryId={repoId}&refName=refs/heads/Develop
第四步:筛选目标策略

从返回的策略配置中,检查是否存在类型ID为0609b952-1397-4640-95ec-e00a01b2c241的配置,存在则标记该仓库符合条件。

示例PowerShell脚本

$orgUrl = "https://dev.azure.com/your-org-name"
$pat = "your-pat-token-here"
$targetBranch = "refs/heads/Develop"
$buildValidationPolicyId = "0609b952-1397-4640-95ec-e00a01b2c241"

# 转换PAT为Base64编码用于认证
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$pat"))

# 获取组织下所有项目
$projects = Invoke-RestMethod -Uri "$orgUrl/_apis/projects?api-version=7.1-preview.4&$top=100" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method Get

# 遍历每个项目
foreach ($project in $projects.value) {
    $projectId = $project.id
    $projectName = $project.name

    # 获取当前项目下的所有仓库
    $repos = Invoke-RestMethod -Uri "$orgUrl/$projectId/_apis/git/repositories?api-version=7.1-preview.1&$top=100" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method Get

    # 遍历每个仓库
    foreach ($repo in $repos.value) {
        $repoId = $repo.id
        $repoName = $repo.name

        try {
            # 获取该仓库Develop分支的分支策略
            $policies = Invoke-RestMethod -Uri "$orgUrl/$projectId/_apis/policy/configurations?api-version=7.1-preview.1&repositoryId=$repoId&refName=$targetBranch" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method Get

            # 检查是否包含Build Validation策略
            if ($policies.value | Where-Object { $_.type.id -eq $buildValidationPolicyId }) {
                Write-Host "符合条件:项目[$projectName] - 仓库[$repoName]"
            }
        }
        catch {
            # 处理分支不存在或权限不足的情况
            Write-Warning "项目[$projectName] - 仓库[$repoName]:无法获取策略(可能分支不存在或权限不足)"
        }
    }
}

注意事项

  • 策略类型ID:不同分支策略对应固定ID,常见的有:
    • 工作项关联:fa4e907d-c16b-4a4c-9dfa-4906e5d171dd
    • 要求评论解析:0e9b3978-b2ce-4dba-8ba2-089bd38d3114
      可通过调用无参数的策略API(GET https://dev.azure.com/{org}/{project}/_apis/policy/configurations?api-version=7.1-preview.1)获取全量策略类型。
  • 分页处理:若项目/仓库数量超过100,需在API中加入continuationToken参数循环拉取,避免遗漏数据。
  • 权限验证:确保PAT的权限覆盖所有需要查询的项目,否则会返回403权限错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:15:27