You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 03:16:14