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

如何配置单个Azure DevOps发布流水线按PR目标分支发布到不同环境

解决方案

你可以通过单条YAML流水线配合阶段执行条件实现需求,具体配置逻辑如下:

1. 配置全局触发规则

首先在流水线根节点配置合并触发和PR触发的分支过滤规则,确保只有符合要求的操作才会启动流水线:

# 代码合并到分支时的触发规则
trigger:
  branches:
    include:
      - dev
      - main

# PR创建/更新时的触发规则
pr:
  branches:
    include:
      - dev
      - main

2. 按环境配置带执行条件的部署阶段

给每个环境的部署阶段添加独立判断条件,流水线触发后只有符合条件的阶段才会执行,其余自动跳过:

stages:
# Dev环境部署:触发场景为合并到dev分支、或有指向dev的PR
- stage: DeployDev
  displayName: 部署到Dev环境
  condition: or(
    eq(variables['Build.SourceBranch'], 'refs/heads/dev'),
    eq(variables['System.PullRequest.TargetBranch'], 'refs/heads/dev')
  )
  jobs:
  - deployment: DevDeployJob
    environment: dev
    strategy:
      runOnce:
        deploy:
          steps:
          # 替换为你实际的Dev环境部署步骤
          - script: echo "Dev 环境部署完成"

# QA环境部署:触发场景为有指向main的PR
- stage: DeployQA
  displayName: 部署到QA环境
  condition: eq(variables['System.PullRequest.TargetBranch'], 'refs/heads/main')
  jobs:
  - deployment: QADeployJob
    environment: qa
    strategy:
      runOnce:
        deploy:
          steps:
          # 替换为你实际的QA环境部署步骤
          - script: echo "QA 环境部署完成"

# Prod环境部署:触发场景为合并到main分支,需手动审批
- stage: DeployProd
  displayName: 部署到Prod环境
  condition: eq(variables['Build.SourceBranch'], 'refs/heads/main')
  jobs:
  - deployment: ProdDeployJob
    # 提前在DevOps平台的环境管理中给prod环境配置手动审批规则即可
    environment: prod
    strategy:
      runOnce:
        deploy:
          steps:
          # 替换为你实际的Prod环境部署步骤
          - script: echo "Prod 环境部署完成"

3. 关键说明

  • 之前出现多环境同时触发的问题,是因为未给阶段配置独立执行条件,默认流水线触发后所有阶段都会顺序执行,加上condition参数后不符合规则的阶段会直接跳过,不会产生实际部署操作
  • 无需配置多套构建流水线,单条流水线的构建产物可以直接在三个部署阶段复用,不会出现交叉触发的问题
  • 如果使用的是可视化编辑器配置流水线,可以在每个环境的部署条件设置中,自定义上述规则的等效表达式,效果完全一致

内容的提问来源于stack exchange,提问作者Army of Markness

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:54:06