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

Azure DevOps多阶段CD Pipeline分支触发部署问题求助

问题分析

当前流水线的核心问题:

  • DEV作为首个阶段,分支非develop时会被跳过,而后续UAT、PROD阶段的条件依赖succeeded()(默认依赖前一阶段成功),导致前一阶段跳过后,后续阶段也因不满足条件被跳过。
  • PROD阶段仅判断succeeded(),未限制分支,存在非release分支下误部署的风险。
解决方案

调整各阶段的条件判断,让阶段触发逻辑独立于前一阶段的跳过状态,同时精准匹配分支规则:

- stage: DEV
  # 仅分支为develop时执行,首个阶段无需依赖succeeded()
  condition: eq(variables['build.sourceBranch'], 'refs/heads/develop')
  displayName: DEV Stage
  jobs:
  - deployment: IIS_DEV_Deployment

- stage: UAT
  # 分支为release开头时执行,允许DEV阶段成功或跳过(避免DEV跳过时UAT被连带跳过)
  condition: and(
    startsWith(variables['build.sourceBranch'], 'refs/heads/release/'),
    not(failed('DEV'))
  )
  displayName: UAT Stage
  jobs:
  - deployment: IIS_UAT_Deployment

- stage: PROD
  # 仅UAT成功且分支为release开头时执行
  condition: and(
    succeeded(),
    startsWith(variables['build.sourceBranch'], 'refs/heads/release/')
  )
  displayName: PROD Stage
  jobs:
  - deployment: IIS_PROD_Deployment
关键调整说明
  1. DEV阶段:移除succeeded()条件,仅保留分支匹配,确保develop分支触发部署,其他分支直接跳过该阶段。
  2. UAT阶段:
    • 用startsWith匹配所有以refs/heads/release/开头的分支(如release/v1.0),比精确匹配更灵活适配多版本release分支。
    • 替换succeeded()为not(failed('DEV')),允许DEV阶段处于成功或跳过状态时都能触发UAT,解决DEV跳过后UAT无法启动的问题。
  3. PROD阶段:新增分支匹配条件,确保仅在release分支下且UAT成功时才执行,避免误部署。

若你的release分支是精确的refs/heads/release/(无后续版本号),将startsWith改回eq即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:17:41