Azure DevOps双分支单流水线配置及多环境部署最佳实践咨询
单流水线双分支差异化触发配置
直接在YAML文件里分别配置持续触发和定时触发规则即可,配置前先去流水线UI的触发设置页,确认选择「使用YAML中的触发配置」,避免UI配置覆盖YAML规则导致触发逻辑异常。
参考配置如下:
# 持续提交触发:仅监听Develop分支的代码提交、PR合并事件 trigger: branches: include: - Develop paths: exclude: # 可配置忽略文档类文件的提交触发,减少无意义的流水线运行 - README.md - docs/** # 定时触发:仅针对Master分支按计划执行 schedules: - cron: "0 2 * * 1-5" # 示例规则:工作日凌晨2点执行,可根据团队实际调整cron表达式 displayName: Master分支工作日定时构建 branches: include: - Master always: true # 设为true则即使分支无新提交也按计划执行,不需要可改为false
注意不要在trigger段的分支包含列表里加Master,否则Master分支的提交也会自动触发流水线,不符合定时触发的要求。流水线运行时可通过内置变量Build.SourceBranch判断当前运行的分支,变量值格式为refs/heads/Develop、refs/heads/Master,可直接作为后续阶段的执行判断条件。
特别提醒:配置完成后要把YAML文件同时合入Master和Develop分支,否则Master分支触发时会因找不到流水线文件报错。
双分支对应多环境部署最佳实践
核心原则是分支与环境固定映射、一次构建多环境复用、卡点前置避免线上风险,具体落地规则如下:
- 固定分支-环境映射关系,禁止跨分支越级部署
- Develop分支的构建产物仅允许部署到DEV环境,每次自动触发构建后直接完成DEV环境部署,无需人工审批,满足开发日常联调需求
- Master分支的定时构建产物,优先自动部署到UAT环境,部署完成后自动通知测试团队开展回归验证;UAT验证通过后,经人工审批卡点才能部署到PROD环境
- 环境配置隔离存储
将DEV、UAT、PROD三个环境的数据库连接串、第三方服务地址、密钥等差异化配置,分别存到Azure DevOps独立的变量组中,部署到对应环境时自动关联匹配的变量组,禁止将敏感配置硬编码在代码或流水线文件中 - 构建产物全程复用
所有触发场景下,流水线的构建阶段仅执行一次编译、打包操作,将产物上传到流水线制品库后,后续所有环境的部署都复用这同一个制品,避免不同环境重复编译带来的版本不一致问题 - 阶段卡点与权限隔离
- Develop分支流水线执行链路:构建 → 自动部署DEV → 运行DEV环境自动化冒烟测试,测试失败直接向代码提交人推送告警
- Master分支流水线执行链路:构建 → 自动部署UAT → 运行UAT环境自动化回归测试 → 测试通过后发送审批通知 → 指定负责人审批通过后才允许执行PROD部署
- 按环境配置部署权限:普通开发仅拥有DEV环境的操作权限,UAT、PROD环境的部署、审批权限仅开放给测试、运维及项目负责人,避免误操作
可参考如下阶段配置实现分支-环境的匹配逻辑:
stages: - stage: Build displayName: 构建打包 # 所有触发场景都先执行构建 jobs: - job: Build steps: - script: dotnet build --configuration Release # 补充单元测试、打包、上传制品的相关步骤 - stage: Deploy_DEV displayName: 部署到DEV环境 dependsOn: Build # 仅Develop分支触发时执行该阶段 condition: eq(variables['Build.SourceBranch'], 'refs/heads/Develop') jobs: - deployment: DEV_Deploy environment: DEV variables: - group: DEV_Env_Config # 关联DEV环境变量组 strategy: runOnce: deploy: steps: # 补充DEV环境部署、冒烟测试步骤 - stage: Deploy_UAT displayName: 部署到UAT环境 dependsOn: Build # 仅Master分支触发时执行该阶段 condition: eq(variables['Build.SourceBranch'], 'refs/heads/Master') jobs: - deployment: UAT_Deploy environment: UAT variables: - group: UAT_Env_Config # 关联UAT环境变量组 strategy: runOnce: deploy: steps: # 补充UAT环境部署、自动化回归测试步骤 - stage: Deploy_PROD displayName: 部署到PROD环境 dependsOn: Deploy_UAT # 仅Master分支触发、且UAT阶段执行成功时才会进入该阶段 condition: eq(variables['Build.SourceBranch'], 'refs/heads/Master') jobs: - deployment: PROD_Deploy environment: PROD variables: - group: PROD_Env_Config # 关联PROD环境变量组 # 提前在Azure DevOps的环境配置页给PROD环境添加审批人,部署到该阶段会自动暂停等待审批 strategy: runOnce: deploy: steps: # 补充PROD环境部署步骤
内容的提问来源于stack exchange,提问作者Ajit Medhekar
相关产品推荐
相关产品推荐

