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

如何基于Git分支触发不同Azure CD流水线并复用CI流水线

问题梳理

我这边部署环境分为dev、uat、production三个阶段,Git仓库设有dev和main两个分支。目前推送代码到dev分支时,会自动触发CI流水线构建镜像并推送到镜像仓库,随后触发CD流水线自动部署到dev环境。
我希望在dev分支合并到main分支时触发后续部署阶段,但不确定能否复用同一CD流水线;当前采用两套CI/CD流水线架构:dev分支对应一套CI/CD,仅自动部署到dev环境;main分支对应一套CI/CD,自动部署到uat环境并包含production阶段。
我想优化为使用单个CI流水线,根据触发构建的Git分支控制CD流水线的运行,避免重复配置仅分支不同的CI流水线。当前的CI流水线YAML配置如下:

trigger:
  branches:
    include:
      - dev
      - main

variables:
- group: devops-project-group
- template: app-variables.yml

pool: 
  vmImage: ubuntu-latest

steps:
- checkout: self
- bash: |
    echo 'starting build ...'
优化方案

完全可以用单CI流水线实现需求,靠分支条件判断来控制不同的CD触发逻辑,核心CD步骤都能复用,只需要根据分支调整部署目标就行,具体配置思路和示例如下:

1. 保留原有分支触发规则

原有的trigger配置已经包含dev和main分支,无需修改,确保两个分支推送/合并时都能触发CI流水线。

2. 添加分支判断变量

新增一个自动匹配分支的环境变量,后续步骤可直接引用该变量区分部署目标:

variables:
- group: devops-project-group
- template: app-variables.yml
- name: DEPLOY_ENV
  value: ${{ if eq(variables['Build.SourceBranchName'], 'dev') }}dev${{ elseif eq(variables['Build.SourceBranchName'], 'main') }}uat${{ else }}none${{ end }}

3. 复用构建核心步骤

原有的checkout、构建脚本等步骤可以直接保留,因为不管哪个分支,构建镜像、推送镜像仓库的逻辑是一致的,无需重复配置。

4. 按分支条件触发对应部署

构建完成后,通过condition属性过滤步骤,只在对应分支下执行部署逻辑:

steps:
- checkout: self
- bash: |
    echo 'starting build ...'
    # 替换为你实际的构建镜像、推送镜像仓库命令
  displayName: '构建并推送镜像'

# 仅dev分支触发dev环境部署
- bash: |
    echo '触发CD流水线部署到dev环境'
    # 替换为调用CD流水线部署dev环境的实际命令(如API调用、内置流水线触发任务)
  displayName: '部署至dev环境'
  condition: eq(variables['Build.SourceBranchName'], 'dev')

# 仅main分支触发uat环境部署
- bash: |
    echo '触发CD流水线部署到uat环境'
    # 替换为调用CD流水线部署uat环境的实际命令
  displayName: '部署至uat环境'
  condition: eq(variables['Build.SourceBranchName'], 'main')

# production阶段建议设为手动触发(仅main分支下可手动执行)
- bash: |
    echo '触发CD流水线部署到production环境'
    # 替换为调用CD流水线部署production环境的实际命令
  displayName: '部署至production环境'
  condition: and(eq(variables['Build.SourceBranchName'], 'main'), eq(variables['Build.Reason'], 'Manual'))
  enabled: false # 默认禁用,需手动开启或设置为手动触发步骤

关键说明

  • 利用condition属性实现步骤的分支过滤,只有满足条件的步骤才会执行。
  • 如果CD流水线是独立的,可以通过API调用或工具内置的流水线触发任务(如Azure DevOps的Azure Pipelines任务),传递不同的环境参数即可复用同一套CD流水线。
  • production阶段务必设置为手动触发,避免合并main分支后自动部署到生产环境,降低操作风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:30:21