azure-devops - 如何从 Azure DevOps Timelines REST API 确定作业依赖关系图
问题描述
我的团队已经构建了 YAML,它具有其他作业的多个dependsOn
作业,但其他作业可以并行运行。我正在构建一个工具来分析我们的构建,我想要它做的一件事就是告诉我构建持续时间。在引入“重试失败的作业”之前,这是微不足道的(最后一个作业完成时间 - 第一个作业开始时间)。然而,现在简单的“最后一个工作完成 - 第一个工作开始”计算不是我关心的值,当一个工作失败,重试,然后成功。我正在尝试计算开发人员在合并 PR 之前需要等待的“挂钟时间”,并且正在将片状作为一个单独的问题进行跟踪。
使用 REST API,我可以使用builds 端点来获取所有 build where result == "succeeded" || result == "partiallySucceeded"
,并且可以使用时间线端点过滤时间线以获取 where 记录列表type == "job"
。
如果不硬编码我的构建的作业依赖顺序(因为它会随着时间而变化),我如何确定作业依赖是什么,所以我可以构建构建作业的甘特图,删除作业时构建未运行的时间被重试了?
例如,假设我的构建有 5 个作业:初始化、构建调试、构建发布、测试、签名。两个 Build 作业依赖于 Init,Test 依赖于 Build Debug,Sign 依赖于 Test 和 Build Release。我想要某种方式以编程方式确定作业依赖图。
解决方案
构建日志不包含作业依赖信息,恐怕您必须通过Items - Get REST API 获取 YAML 文件,并检查文件中的作业依赖。
GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/items?path={path}&versionDescriptor.version={branch}&api-version=6.1-preview.1
如果管道中有模板,您需要通过相同的 api 指定它们的路径来获取模板。
推荐阅读
- objective-c - 从后台返回时iOS应用程序请求失败
- ruby-on-rails - Rails 5:可以使用 collection_check_boxes 将复选框字段写入数据库
- mfc - 多个基于 MFC 对话框的项目
- javascript - 如何处理 Redux 中 navigator.geolocation.getCurrentPosition() 的异步行为并将用户的位置存储在 Redux 状态?
- php - 如何使用 vuejs 将其实现为数组?
- ios - 定义一次 UIAlertViewController 并在 Objective-C 的不同类中使用它
- swift - 在 Vapor 中手动创建 SQLite 数据库中的数据
- python-3.x - 应用维纳滤波器使用 python 去除噪声
- php - 来自不同类的电子邮件验证函数似乎返回了错误的值
- authorization - 通过 XACML 策略的 RBAC/ABAC