如何从Azure DevOps的YAML流水线中获取阶段结果

6
到目前为止,我一直在使用Azure DevOps REST Api从Azure DevOps获取发布数据以进行报告。显然,这将随着新的CI/CD使用方式——YAML和多阶段管道(目前是预览版)而改变。在这种情况下,构建和发布策略已经过时,一切都定义为管道并分为阶段(构建阶段、部署阶段1、部署阶段2等)。
我尝试通过构建列表方法接收数据,但这些数据是有限的,我缺少一些重要信息,比如“阶段是否成功”。
有没有人已经在YAML Pipelines和Azure DevOps REST Api的组合上有经验?是否有一种方法可以获取完整的数据(与传统发布策略一样)?或者它目前正在开发中,我需要耐心等待?
提前感谢!
3个回答

6

如何从Azure DevOps的YAML流水线中获取阶段结果

针对此问题,您需要使用Status - Get rest api。

GET https://dev.azure.com/{organization}/{project}/_apis/build/status/{definition}?api-version=5.1-preview.1

这个 API 可以获取特定定义的构建状态,可选择性地限定到特定分支、阶段、作业和配置。

以下是我使用 Postman 进行测试的结果: 图片描述 图片描述

更新,第二种方法:

您可以在浏览器中按下 F12 键,然后选择 Network 选项卡来捕获获取阶段结果的请求。您可以从响应正文中获取结果,但不同的阶段结果由不同的数字表示,例如 0->完成,5->取消等。

图片描述 图片描述


嗨,感谢您的快速回复。如果我指定PipelineId,我会得到以下响应:height : 20.0 xmlns : http://www.w3.org/2000/svg linearGradient : linearGradient clipPath : clipPath g : {g, g} svg : svg``` 您能分享您的响应吗? - Boologne
此 REST API 返回的响应体是一个图片格式,而不是 JSON 格式。这可以从我在 Postman 中获取到的响应体中看出来。 - Hugh Lin
1
@o_boo 目前这个 REST API 还有一些限制。因此我提供了第二种方法,请查看我的更新,虽然这仍然不是完美的。 - Hugh Lin
谢谢。那么我必须等到适当的API可用,因为我需要一个稳定的版本才能将其放入AzDO扩展中。只要多阶段流水线仍处于预览阶段,我就不能期望一切都已准备就绪。 - Boologne
有没有关于限制第二种方法PAT权限的指导?除了完全访问权限以外,我似乎无法让它正常工作,但我真的不想给它完全访问权限。 - F.A.

5
看起来 Timeline API 正是为此而设计的。
GET https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}/timeline/{timelineId}?api-version=7.1-preview.2

文档可以在这里找到。

返回一个记录数组,其中包含每个阶段、阶段、作业、任务和检查点的状态。

至于{timelineId},它不是必需的字段,与默认示例相反,不提供它也会产生正确的结果。看起来这可能是来自以前的尝试:

名称 类型 说明
timelineId string 获取或设置拥有表示此尝试的记录的时间轴标识符。

0

感谢提示,Joel是正确的,您将获得所有记录,因此您只需要根据阶段类型进行过滤,即可获取管道中的所有阶段

如果您正在使用C#包装器,则可以使用以下代码=>

var buildClient = connection.GetClient<BuildHttpClient>();
        var timeline = await buildClient.GetBuildTimelineAsync(project.Name, buildDef.LatestBuild.Id);
        var stageTimelines = timeline.Records.Where(record => record.RecordType == "Stage").ToList();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接