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
关键调整说明
- DEV阶段:移除
succeeded()条件,仅保留分支匹配,确保develop分支触发部署,其他分支直接跳过该阶段。 - UAT阶段:
- 用
startsWith匹配所有以refs/heads/release/开头的分支(如release/v1.0),比精确匹配更灵活适配多版本release分支。 - 替换
succeeded()为not(failed('DEV')),允许DEV阶段处于成功或跳过状态时都能触发UAT,解决DEV跳过后UAT无法启动的问题。
- 用
- PROD阶段:新增分支匹配条件,确保仅在release分支下且UAT成功时才执行,避免误部署。
若你的release分支是精确的refs/heads/release/(无后续版本号),将startsWith改回eq即可。
内容的提问来源于stack exchange,提问作者sebu
相关产品推荐
相关产品推荐

