如何通过C#的Microsoft.TeamFoundation库取消Azure DevOps特定分支的运行中构建?
正确取消Azure DevOps特定分支运行中构建的方法
直接修改GetBuildsAsync返回的构建对象并调用UpdateBuildAsync会因请求格式不符合API要求返回Bad Request,正确的做法是使用BuildUpdateParameters对象传递必要的更新参数:
问题原因
从GetBuildsAsync获取的Build对象包含大量只读字段和冗余数据,直接修改其Status后提交会导致请求不符合Azure DevOps API的参数规范,触发Bad Request错误。
修正后的代码
var builds = await buildClient.GetBuildsAsync( Guid.Parse(Settings.ProjectId), new List<int> { buildDefinitionId }, statusFilter: BuildStatus.InProgress); var buildsToCancel = builds.Where(x => Helpers.GetBranchName(x) == branchName).ToList(); foreach (var build in buildsToCancel) { // 创建仅包含必要更新字段的参数对象 var updateParams = new BuildUpdateParameters { Status = BuildStatus.Cancelling, Reason = BuildReason.Manual // 可选,标注取消原因 }; // 传入构建ID和更新参数执行取消 await buildClient.UpdateBuildAsync(updateParams, Guid.Parse(Settings.ProjectId), build.Id); }
关键说明
- 使用
BuildUpdateParameters仅传递需要更新的字段(这里是Status),避免冗余数据干扰API解析 - 调用
UpdateBuildAsync时,需要明确传入项目ID和构建ID,而非直接传入原Build对象 - 确保当前操作账号拥有Edit Builds或Build Administrator权限,否则会触发权限相关错误
内容的提问来源于stack exchange,提问作者Matthew van Boheemen
相关产品推荐
相关产品推荐

