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

如何批量查询Azure DevOps组织内的提交总数及其他组织级使用统计指标

如何批量查询Azure DevOps组织内的提交总数及其他组织级使用统计指标

嗨,刚好之前帮团队搞定过类似的Azure DevOps组织级统计需求,确实官方没有直接的跨项目仪表盘能一次性展示这些数据,但有两个靠谱的办法可以实现,给你详细说说:

方法一:用Azure DevOps REST API 自己写脚本汇总

这是最灵活的方式,不管你用PowerShell、Python还是其他语言,都能通过API遍历所有项目,把各个指标攒起来。

具体步骤拆解:

  1. 先拿到组织里所有项目的列表
    调用Projects接口获取所有项目的ID和名称,接口示例:

    GET https://dev.azure.com/{你的组织名}/_apis/projects?api-version=7.1-preview.4
    

    拿到项目列表后,就可以逐个处理了。

  2. 逐个项目查询各项指标

    • 仓库总数:对每个项目调用仓库列表接口,看返回的count字段就是该项目的仓库数:
      GET https://dev.azure.com/{你的组织名}/{项目ID或名称}/_apis/git/repositories?api-version=7.1-preview.1
      
    • 分支总数:每个仓库都要查分支,接口里用filter=heads只看主线分支,统计返回的条目数:
      GET https://dev.azure.com/{你的组织名}/{项目ID或名称}/_apis/git/repositories/{仓库ID}/refs?filter=heads&api-version=7.1-preview.1
      
    • 提交总数:可以按时间范围筛选(比如查近一年),注意数据量大的时候要处理分页(用$top和continuationToken参数):
      GET https://dev.azure.com/{你的组织名}/{项目ID或名称}/_apis/git/repositories/{仓库ID}/commits?searchCriteria.fromDate=2023-01-01&searchCriteria.toDate=2024-01-01&api-version=7.1-preview.1
      
    • 拉取请求总数:调用PR接口,默认会返回所有状态的PR,统计总数即可,同样要注意分页:
      GET https://dev.azure.com/{你的组织名}/{项目ID或名称}/_apis/git/pullrequests?api-version=7.1-preview.1
      
  3. 汇总所有项目的数据
    把每个项目的各项指标加起来,就是整个组织的总统计了。

方法二:用Power BI 做可视化报表(不用写代码)

如果不想折腾脚本,Power BI是个不错的选择,官方支持直接连接Azure DevOps数据源,自动拉取跨项目数据做报表。

简单操作步骤:

  • 打开Power BI Desktop,选「获取数据」→「Azure DevOps」,输入你的组织URL并登录授权。
  • 选择要导入的数据实体:Projects、Repositories、Git Commits、Pull Requests这些都选上。
  • 在数据模型里把各个表用Project ID关联起来(比如Projects表的ID关联到Repositories表的Project ID)。
  • 拖放可视化组件,比如用卡片图展示总仓库数、总提交数,用表格展示每个项目的明细。
  • 还能设置自动刷新计划,让报表定期更新最新数据。

一些小提醒

  • 调用API的时候要注意速率限制,Azure DevOps有请求频率上限,脚本里可以加个小延迟避免被限流。
  • 提交数这种数据量可能很大的指标,建议按时间分段查询,别一次性查好几年的,容易超时。
  • 确保你的账号有足够权限:至少需要组织内所有项目的「读取」权限,不然有些项目的数据拉不出来。

备注:内容来源于stack exchange,提问作者lemming

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 09:27:37