如何通过API获取微软托管公共代理的流水线使用情况?
试试用Pipeline Run Details API(作业层面数据):
调用GET https://dev.azure.com/{org}/{proj}/_apis/build/builds/{buildId}/timeline?api-version=7.1-preview.1,这个接口返回的timeline数据里,每个type: "Job"的节点会带workerName和pool相关信息——比如pool对象里的name和isHosted属性,能直接关联到微软托管代理池。要是嫌遍历项目和构建麻烦,可以先批量拉取构建ID,再并行请求timeline接口,能节省不少时间。启用Azure Monitor Logs来查:
给Azure DevOps组织开诊断设置,把Pipeline相关日志发到Log Analytics工作区,之后用Kusto查询直接聚合数据,比如:AzureDevOpsPipelineLogs | where PoolType == "Microsoft Hosted" | project BuildId, JobName, PoolName, StartTime, EndTime这种方式不用挨个遍历项目和构建,直接通过日志生成报表,适合长期统计。
用Azure DevOps CLI简化操作:
装完Azure DevOps CLI后,用az pipelines build show加--timeline参数就能拿到带代理信息的作业数据,写个脚本批量处理就行,比如:az pipelines build list --org https://dev.azure.com/{org} --project {proj} --query "[].id" | xargs -I {} az pipelines build show --id {} --org https://dev.azure.com/{org} --project {proj} --timeline --query "records[?type=='Job'].{JobName:name, PoolName:pool.name, IsHosted:pool.isHosted}"CLI能省掉自己写API请求的麻烦,适合快速验证或者自动化脚本。
重新检查Service Hooks配置:
之前可能没选对事件类型或者没开详细timeline,试试选Build completed事件,配置时勾选"Include detailed timeline"选项,这样webhook负载里就会包含作业的代理池信息了。
内容的提问来源于stack exchange,提问作者Dan Tracey

