如何从Azure DevOps工作项关联的拉取请求获取并检查成功流水线
获取Azure DevOps拉取请求/工作项关联的流水线及运行状态
核心实现思路
要关联拉取请求(PR)/提交到对应流水线,需借助Azure DevOps客户端库中的BuildHttpClient,通过PR的提交ID或工作项ID,查询关联的构建实例及对应的流水线定义。
具体操作步骤
1. 初始化BuildHttpClient
基于已有的Vss连接实例,创建BuildHttpClient:
using Microsoft.TeamFoundation.Build.WebApi; using Microsoft.VisualStudio.Services.Client; // 假设你已通过WorkItem/PullRequest获取到VssConnection实例 var buildClient = connection.GetClient<BuildHttpClient>();
2. 通过拉取请求查询关联流水线
利用PR的提交ID,查询包含该提交的已完成构建,再关联到对应的流水线定义:
// 假设已有PullRequest对象pullRequest var projectName = pullRequest.Repository.Project.Name; var commitId = pullRequest.LastMergeSourceCommit.CommitId; // 查询包含目标提交的已完成构建 var builds = await buildClient.GetBuildsAsync( project: projectName, repositoryId: pullRequest.Repository.Id.ToString(), commitId: commitId, statusFilter: BuildStatus.Completed ); // 遍历构建获取流水线及运行状态 foreach (var build in builds) { var pipeline = await buildClient.GetDefinitionAsync(projectName, build.Definition.Id); bool isSuccess = build.Result == BuildResult.Succeeded; // 按需处理流水线信息 Console.WriteLine($"流水线名称: {pipeline.Name}, 运行状态: {(isSuccess ? "成功" : "失败")}"); }
3. 通过工作项查询关联流水线
通过工作项ID,查询关联的构建实例,进而获取流水线信息:
// 假设已有WorkItem对象workItem var projectName = workItem.Project.Name; // 查询关联到该工作项的已完成构建 var buildRefs = await buildClient.GetBuildsAsync( project: projectName, workItemId: workItem.Id, statusFilter: BuildStatus.Completed ); foreach (var buildRef in buildRefs) { var pipeline = await buildClient.GetDefinitionAsync(projectName, buildRef.Definition.Id); bool isSuccess = buildRef.Result == BuildResult.Succeeded; // 按需处理流水线信息 Console.WriteLine($"流水线ID: {pipeline.Id}, 最后运行结果: {(isSuccess ? "成功" : "失败")}"); }
4. 关键注意事项
- 确保服务账号拥有**Build (Read)**权限,避免权限不足报错。
- 若PR触发多次构建,可通过
build.StartTime筛选最新的构建实例。 BuildDefinition对应流水线配置对象,Build对应单次构建运行实例,二者需区分使用。
内容的提问来源于stack exchange,提问作者yst_
相关产品推荐
相关产品推荐

