Azure Devops Server无需遍历项目查询集合24小时全部发布记录
Azure DevOps Server 2021 集合级发布记录查询方案
方案1:通过代理池作业关联查询(适配所有发布共用同一代理池的场景,无需遍历全部项目)
Azure DevOps Server 2021 原生未提供公开的集合级发布查询API,但你可以通过代理池作业接口间接实现需求,步骤如下:
- 第一步:获取目标代理池ID(已知可跳过),调用接口:
GET https://{你的服务域名}/{集合名称}/_apis/distributedtask/pools?poolName={代理池名称}&api-version=7.1-preview.1 - 第二步:拉取代理池24小时内的所有作业记录,调用接口:
GET https://{你的服务域名}/{集合名称}/_apis/distributedtask/pools/{上一步获取的poolId}/jobs?minFinishTime={24小时前的UTC时间}&api-version=7.1-preview.1
返回结果中planType字段值为Release的条目即为发布作业,条目内已经包含对应项目ID、发布ID、发布管道ID等核心信息 - 第三步(可选):如果需要获取发布的完整信息,仅需对作业记录中存在的对应项目调用项目级发布查询接口即可,无需遍历全量团队项目,查询效率远高于全量遍历
方案2:集合库直接查询(仅限有数据库只读权限的内部场景)
如果你有权限访问Azure DevOps Server对应的SQL Server集合数据库,可以直接执行SQL查询获取结果,速度最快:
SELECT r.ReleaseId, r.ReleaseName, r.CreatedDate, p.ProjectName 团队项目名称, rd.DefinitionName 发布管道名称 FROM [你的集合库名].[dbo].[tbl_Release] r INNER JOIN [你的集合库名].[dbo].[tbl_Project] p ON r.ProjectId = p.ProjectId INNER JOIN [你的集合库名].[dbo].[tbl_ReleaseDefinition] rd ON r.DefinitionId = rd.DefinitionId WHERE r.CreatedDate >= DATEADD(HOUR, -24, GETUTCDATE()) ORDER BY r.CreatedDate DESC
注意:仅可执行只读查询,禁止修改数据库内任何数据,避免造成Azure DevOps Server服务异常,该方案不建议用于对外业务对接场景,仅适合内部统计、运维排查使用
方案选型建议
- 无数据库权限、需要对接外部业务系统时,优先选择代理池作业方案
- 仅内部使用、有数据库只读权限时,优先选择数据库查询方案
内容的提问来源于stack exchange,提问作者Sherpa11
相关产品推荐
相关产品推荐

