Azure DevOps REST API:如何计算变更前置时间(Lead Time To Change)
用Azure DevOps REST API计算变更前置时间的可行方案
既然你已经拿到了完成的PR和关联工作项,接下来要关联部署的话,有两个实用的路径,我给你详细拆解下:
路径1:从拉取请求顺藤摸瓜到部署
这个路径顺着「PR合并记录→构建→部署」的链路走,适合需要精准关联PR直接触发的部署场景:
- 获取PR的合并提交记录
每个完成的PR都会有合并到目标分支的commit,你可以用PR ID调用这个接口拿到所有关联的commit:
GET https://dev.azure.com/{org}/{proj}/_apis/git/repositories/{repoId}/pullRequests/{prId}/commits?api-version=7.1-preview.1
响应里的commitId就是后续需要的关键标识。
- 通过Commit ID找到对应的构建
构建任务通常会关联触发它的commit,用上面拿到的commitId调用构建查询接口,建议加上构建定义ID和成功状态的筛选,缩小范围:
GET https://dev.azure.com/{org}/{proj}/_apis/build/builds?api-version=7.1-preview.7&commitId={commitId}&definitionId={生产构建定义ID}&statusFilter=succeeded
- 通过构建ID找关联的生产部署
拿到构建ID后,调用部署查询接口,明确筛选生产环境且状态为成功的记录:
GET https://dev.azure.com/{org}/{proj}/_apis/release/deployments?api-version=7.1-preview.3&buildId={buildId}&environmentName={你的生产环境名称}&status=succeeded
响应里的completedOn就是部署完成的时间,结合PR的closedDate(PR完成时间)就能算出变更前置时间。
路径2:从关联的工作项直接获取部署
既然你的工作项已经关联了部署,这个路径更直接,不需要绕PR的commit:
- 获取工作项的关联关系
调用工作项详情接口,展开relations字段,就能看到所有关联的链接:
GET https://dev.azure.com/{org}/{proj}/_apis/wit/workitems/{workItemId}?$expand=relations&api-version=7.1-preview.3
- 筛选出关联的部署链接
在返回的relations数组里,找类型为ArtifactLink,且url包含/release/deployments/的条目,类似这样的结构:
{ "rel": "ArtifactLink", "url": "https://dev.azure.com/{org}/{proj}/_apis/release/deployments/{deploymentId}", "attributes": { "name": "Deployed" } }
提取里面的deploymentId即可。
- 获取部署详情
用deploymentId调用部署详情接口,拿到部署时间和环境信息:
GET https://dev.azure.com/{org}/{proj}/_apis/release/deployments/{deploymentId}?api-version=7.1-preview.3
同样要确认是生产环境的成功部署,再用PR完成时间和部署完成时间计算差值。
一些关键注意事项
- 一定要筛选生产环境的成功部署,否则如果拿了测试/预发环境的部署记录,计算出来的前置时间会完全不准确。
- Azure DevOps返回的时间是UTC时区,计算时差时记得转换成你需要的时区,避免出现时间差错误。
- 部分场景下一个PR可能对应多次部署(比如重新部署生产),建议取最早的那次成功部署时间来计算前置时间。
内容的提问来源于stack exchange,提问作者andomeda
相关产品推荐
相关产品推荐

