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

如何通过Azure DevOps API、az devops cli等方式在新建发布时取消原有发布阶段

解决方案合集

第一步:排查Azure DevOps API/CLI调用失败的原因

  • 先确认权限:你的服务账号/PAT令牌必须有发布管理>取消发布的权限,最低要求是发布的参与者权限,仅开通读取权限会直接导致操作失败
  • 检查请求参数正确性:调用取消发布API时必须传对三个核心参数:组织名、项目ID/名称、要取消的发布ID;如果是取消指定阶段,还要额外传阶段ID,同时请求体的status字段取值要符合接口要求
  • 避开CLI常见坑:用az devops cli操作前要先运行az devops configure --defaults organization=https://dev.azure.com/你的组织名 project=你的项目名配置默认上下文,未配置默认上下文即使完成登录也会返回404或者无权限报错

可行实现方案

方案1:修复API/CLI调用逻辑直接实现

以下是经过验证的可用请求示例:

取消整个发布的API请求

PATCH https://vsrm.dev.azure.com/{组织名}/{项目名}/_apis/release/releases/{发布ID}?api-version=7.1-preview.8
Content-Type: application/json
Authorization: Basic {你的PAT令牌Base64编码}

{
  "status": "canceling"
}

取消单个发布阶段的API请求

PATCH https://vsrm.dev.azure.com/{组织名}/{项目名}/_apis/release/releases/{发布ID}/environments/{阶段ID}?api-version=7.1-preview.8
Content-Type: application/json
Authorization: Basic {你的PAT令牌Base64编码}

{
  "status": "canceled"
}

对应CLI命令

取消整个发布:az pipelines release cancel --id {发布ID}
取消指定发布阶段:az pipelines release environment update --release-id {发布ID} --id {阶段ID} --status canceled

方案2:用发布流水线内置能力自动处理

无需外部调用API,直接在发布定义中嵌入逻辑实现:

  • 在你的发布定义里新增一个前置作业,作业第一步运行PowerShell/Bash脚本,调用Azure DevOps内置的预定义变量,获取当前项目下所有状态为inProgress的发布,过滤出和当前发布同属一个发布定义、创建时间早于当前发布的记录
  • 遍历符合条件的旧发布,调用内置的REST客户端直接取消对应阶段/整个发布,用内置的System.AccessToken令牌鉴权,不需要自行配置PAT,仅需要打开作业的允许脚本访问OAuth令牌选项即可
  • 前置脚本执行完成后再运行你原来的依赖查询逻辑

方案3:配置发布并发控制规则

如果你的核心需求是保证同一时间只有一个同定义的发布在运行,不需要写代码即可实现:
在发布定义的选项标签页找到部署队列设置,把最大并行部署数设为1,同时勾选取消较旧的部署,系统会自动在新发布触发时终止正在运行的旧发布。

注意事项

  • 如果你的阶段设置了手动审批或者闸门,处于待审批状态的阶段调用取消API也可以正常终止
  • 取消操作是异步的,调用API后可能需要1-5秒才会更新发布状态,不要重复发起请求
  • 使用System.AccessToken鉴权时,要给项目生成服务账号分配取消发布的权限,否则会返回403无权限错误

内容的提问来源于stack exchange,提问作者Fabiano Alves

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:48:00