Azure DevOps REST API获取指定流水线发布版本列表失败求助
解决Azure DevOps REST API获取指定流水线发布版本的问题
我明白你现在的困扰——能拿到构建流水线的运行列表,但发布版本的API调用一直失败,核心问题是你没在请求中指定目标发布流水线的定义ID,导致API要么返回项目下所有发布(不符合你的需求),要么因缺少过滤条件触发了权限/请求格式问题。下面给你一步步的解决方案:
1. 先确认你的发布流水线的Definition ID
首先要区分开「构建流水线」和「发布流水线」:你能获取的“流水线运行列表”是构建流水线的结果,而发布版本对应的是发布定义(Release Definition)。你可以通过两种方式拿到它的ID:
- 直接在ADO界面找:打开目标发布流水线的页面,URL里会带有
definitionId=XXX,这个XXX就是你需要的ID; - 用API批量查询:如果不确定ID,可调用这个接口获取项目下所有发布定义,再筛选目标流水线:
GET https://dev.azure.com/{organization}/{project}/_apis/release/definitions?api-version=7.1-preview.4
2. 正确的API调用地址
要获取指定发布流水线的所有版本,必须在请求中加上definitionId参数,完整的API端点如下:
GET https://dev.azure.com/{organization}/{project}/_apis/release/releases?definitionId={你的发布定义ID}&api-version=7.1-preview.8
注:
api-version可以用稳定版(比如7.0)或者最新预览版,只要和官方文档版本匹配即可。
3. Postman中的认证配置
确保你在Postman里正确配置了认证,这是很多调用失败的常见原因:
- 先生成一个具有Release Read权限的Personal Access Token(PAT);
- 在请求Headers中添加:
这里的base64字符串是把Authorization: Basic <base64编码的字符串>:你的PAT内容(注意前面的冒号)进行Base64编码后的结果。
4. 可选的过滤参数(按需使用)
如果需要缩小结果范围,可以添加这些参数优化返回结果:
$top=50:只返回最新的50条发布版本;statusFilter=completed:只返回已完成的发布;createdAfter=2024-01-01T00:00:00Z:返回指定时间之后创建的发布。
示例带过滤的请求:
GET https://dev.azure.com/{org}/{proj}/_apis/release/releases?definitionId=123&$top=20&statusFilter=completed&api-version=7.1-preview.8
5. PowerBI中的使用方式
后续要在PowerBI中调用这个API,可以用Web.Contents函数,示例M代码:
let Source = Json.Document(Web.Contents("https://dev.azure.com/你的组织/你的项目/_apis/release/releases?definitionId=123&api-version=7.1-preview.8", [Headers=[Authorization="Basic 你的Base64编码PAT"]])), value = Source[value] in value
将value转换成数据表后,就能直接用于后续的报表分析了。
内容的提问来源于stack exchange,提问作者Nate




