如何检索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
相关产品推荐
相关产品推荐

