如何提取Azure DevOps组织下所有项目的全量发布记录
Azure DevOps全组织发布记录统计方案
问题结论
目前Azure DevOps官方没有提供可直接获取全组织所有项目发布记录的单一全局API,所有Release类接口均为项目维度,必须传入项目名称/ID作为参数。
可直接使用的实现方案
方案1:PowerShell遍历导出脚本
前置要求:
- 你拥有组织级项目读取权限、所有目标项目的发布记录读取权限
- 创建个人访问令牌(PAT),权限勾选
Project and Team (Read)、Release (Read)
# 配置参数 $orgName = "你的组织名称" $pat = "你的PAT令牌" $exportPath = "C:\AzureDevOps_全组织发布记录.csv" $startTime = "2024-01-01" # 按需调整统计起始时间 # 构造认证头 $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f "",$pat))) $headers = @{Authorization=("Basic {0}" -f $base64AuthInfo)} # 1. 获取全组织所有项目列表 $projectsUri = "https://dev.azure.com/$orgName/_apis/projects?api-version=6.0&`$top=1000" $projects = (Invoke-RestMethod -Uri $projectsUri -Headers $headers -Method Get).value $allReleases = @() # 2. 遍历每个项目拉取发布记录 foreach ($project in $projects) { Write-Host "正在处理项目:$($project.name)" $releaseUri = "https://vsrm.dev.azure.com/$orgName/$($project.name)/_apis/release/releases?api-version=6.0&minCreatedTime=$startTime&`$top=1000" do { $response = Invoke-RestMethod -Uri $releaseUri -Headers $headers -Method Get $allReleases += $response.value | Select-Object @{n='项目名';e={$project.name}}, name, id, createdOn, createdBy, status, @{n='发布定义名';e={$_.releaseDefinition.name}} $releaseUri = $response.continuationToken ? "https://vsrm.dev.azure.com/$orgName/$($project.name)/_apis/release/releases?api-version=6.0&minCreatedTime=$startTime&`$top=1000&continuationToken=$($response.continuationToken)" : $null } while ($releaseUri) } # 3. 导出到CSV文件 $allReleases | Export-Csv -Path $exportPath -Encoding UTF8 -NoTypeInformation Write-Host "导出完成,文件路径:$exportPath"
方案2:Azure DevOps CLI 轻量脚本
前置要求:已安装Azure CLI和Azure DevOps扩展,执行
az login登录后设置默认组织az devops configure --defaults organization=https://dev.azure.com/你的组织名
# 获取所有项目名称 projects=$(az devops project list --query "value[].name" -o tsv) output_file="AzureDevOps_全组织发布记录.csv" # 写入CSV表头 echo "项目名,发布名称,发布ID,创建时间,创建人,状态,发布定义名" > $output_file # 遍历项目拉取发布记录 for project in $projects do echo "处理项目:$project" az pipelines release list --project "$project" --query "[].{project:'$project', name:name, id:id, createdOn:createdOn, createdBy:createdBy.displayName, status:status, definitionName:releaseDefinition.name}" -o tsv | sed 's/\t/,/g' >> $output_file done echo "导出完成:$output_file"
方案3:自动化定时报表Pipeline
如果需要每月自动统计,可直接在Azure DevOps中创建定时运行的Pipeline:
- 选用微软托管的Ubuntu/Windows代理即可,无需自有服务器
- Pipeline权限配置:开启
允许脚本访问OAuth令牌,为构建服务账号授予组织级项目读取、发布读取权限 - 执行上述脚本后,将生成的CSV作为Pipeline制品留存,也可配置自动邮件通知发送给相关负责人
- 触发规则设置为每月1号自动运行,无需人工干预
优化建议
如果仅需统计每月发布次数,可在调用发布接口时添加minCreatedTime和maxCreatedTime参数过滤指定月份的记录,同时控制$top参数的数值,减少接口请求量,避免触发Azure DevOps接口限流规则。
内容的提问来源于stack exchange,提问作者Den Wahlin
相关产品推荐
相关产品推荐

