如何通过Azure DevOps REST API获取含手动与自动构建消息的构建列表
获取Azure DevOps所有构建的创建消息(含手动触发)
问题分析
你当前调用的builds列表接口默认返回的triggerInfo仅包含CI自动触发(如PR合并到master)的构建消息(ci.message),但手动触发的构建的自定义消息不会存储在triggerInfo中,而是在构建的属性字段里,默认接口不会返回这些字段,需要通过API扩展参数来获取。
解决方案
方案1:扩展列表请求的返回字段
修改原API请求,添加$expand=properties参数,让接口返回构建的属性集合,其中包含手动触发时的消息:
GET https://dev.azure.com/{my Org}/{my project}/_apis/build/builds?api-version=5.1&$expand=properties
返回的每个构建对象会新增properties字段,手动触发的构建的消息存储在properties['Microsoft.TeamFoundation.Build.ReasonMessage']中。
示例手动构建的返回片段:
"properties": { "Microsoft.TeamFoundation.Build.ReasonMessage": "手动触发:紧急修复生产环境问题", // 其他属性... }, "triggerInfo": {}, "id": 5537, "buildNumber": "sql-data-warehouse-20240229.2"
方案2:调用单个构建详情接口(适合需要完整构建信息的场景)
如果需要更详细的构建数据,可以针对每个构建ID调用详情接口,添加$expand=all参数获取所有字段:
GET https://dev.azure.com/{my Org}/{my project}/_apis/build/builds/{buildId}?api-version=5.1&$expand=all
在返回结果中,手动触发的消息可以直接通过reasonMessage字段获取,自动触发的消息仍可从triggerInfo.ci.message获取。
统一提取消息的逻辑
你可以通过以下逻辑统一提取所有构建的创建消息:
- 若
triggerInfo.ci.message存在(自动触发构建),则使用该值; - 若
properties['Microsoft.TeamFoundation.Build.ReasonMessage']或reasonMessage存在(手动触发构建),则使用该值; - 若都不存在,可设置默认值(如"无自定义消息")。
验证说明
- 自动触发构建:
triggerInfo.ci.message依然保留PR合并等触发消息; - 手动触发构建:通过扩展字段可以获取用户触发时输入的自定义消息;
- API版本5.1完全支持上述扩展参数,无需升级版本。
内容的提问来源于stack exchange,提问作者Daniel Worby
相关产品推荐
相关产品推荐

