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

向staging分支新推送时,如何取消旧的暂存流水线?

解决Azure DevOps多条待审批流水线的问题

针对你遇到的staging分支推送修复后,多条流水线等待Production审批的问题,这里有几个直接可行的解决办法:

方案一:通过环境配置自动取消旧待审批部署(最简便)

直接在Production环境的审批设置里开启「自动取消旧待审批请求」:

  1. 打开Azure DevOps项目的环境面板,找到production环境
  2. 点击环境右上角的「...」选择「编辑」
  3. 切换到「部署审批」标签,找到「当有新的部署请求时」,选择取消当前正在等待的部署
  4. 保存设置

之后新流水线触发时,所有之前处于待审批状态的旧Production部署会被自动取消,只保留最新的一条等待审批。

你也可以直接在流水线YAML里配置这个规则,把Production阶段的环境配置改成这样:

environment:
  name: production
  approval:
    autoCancelPreviousPendingDeployments: true

方案二:在流水线中添加脚本自动清理旧流水线

如果需要更灵活的控制,可以在Build阶段完成后,添加一个脚本步骤,自动取消同一分支下所有待审批的旧流水线:

在Build job的末尾添加以下步骤:

- script: |
    # 登录Azure DevOps CLI
    az devops login --organization "$(System.TeamFoundationCollectionUri)"
    # 获取当前流水线ID
    CURRENT_BUILD=$(Build.BuildId)
    # 查询staging分支下,状态为待审批(notStarted)且ID小于当前的流水线
    OLD_BUILDS=$(az pipelines build list \
      --project "$(System.TeamProject)" \
      --branch staging \
      --status notStarted \
      --query "[?id < $CURRENT_BUILD].id" \
      -o tsv)
    # 逐个取消旧流水线
    for BUILD_ID in $OLD_BUILDS; do
      echo "Canceling old pending build: $BUILD_ID"
      az pipelines build cancel --id $BUILD_ID --project "$(System.TeamProject)"
    done
  displayName: "Cancel old pending production deployments"
  env:
    AZURE_DEVOPS_EXT_PAT: $(System.AccessToken)

注意:需要在流水线的「设置」里勾选「允许脚本访问OAuth令牌」,并且确保流水线的服务账号拥有「编辑构建流水线」的权限。

方案三:限制Production阶段仅触发最新构建

你可以修改Production阶段的触发条件,只有当当前构建是staging分支的最新构建时,才进入待审批状态。不过这个方案需要调用API查询最新构建ID,相对复杂一些,前两个方案已经能解决大部分场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:55:24