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

如何在单个YAML文件中适配Development与Master分支的发布流程?

可以合并为单个YAML文件,实现双分支适配的发布流程

完全可以通过分支条件判断在单个YAML文件中实现两个分支的差异化发布流程,主流CI/CD工具(如GitHub Actions、Azure Pipelines、GitLab CI)都原生支持这种逻辑。

核心思路

把两个分支的通用步骤(比如构建)抽离为公共部分,然后针对不同分支,用条件判断触发专属的部署、测试步骤,实现一套YAML适配双分支的需求。

具体实现示例

示例1:GitHub Actions

name: 分支适配发布流程

# 只监听Development和Master分支的推送事件
on:
  push:
    branches:
      - Development
      - Master

jobs:
  # 通用构建阶段
  build:
    runs-on: ubuntu-latest
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4

      - name: 构建项目
        run: |
          # 替换为你的实际构建命令,比如npm run build / mvn package
          echo "执行项目构建"

      # Development分支专属:运行单元测试
      - name: 运行单元测试
        if: github.ref == 'refs/heads/Development'
        run: |
          # 替换为你的单元测试命令
          echo "执行单元测试"

  # 部署与测试阶段,依赖构建完成
  deploy-and-test:
    needs: build
    runs-on: ubuntu-latest
    steps:
      # -------------------------- Development分支流程 --------------------------
      - name: 部署到测试服务器
        if: github.ref == 'refs/heads/Development'
        run: |
          # 替换为你的测试服务器部署命令
          echo "部署到测试服务器"

      - name: 运行自动化回归套件
        if: github.ref == 'refs/heads/Development'
        run: |
          # 替换为你的回归测试命令
          echo "执行自动化回归测试"

      # -------------------------- Master分支流程 --------------------------
      - name: 部署到生产服务器
        if: github.ref == 'refs/heads/Master'
        run: |
          # 替换为你的生产服务器部署命令
          echo "部署到生产服务器"

      - name: 运行自动化冒烟套件
        if: github.ref == 'refs/heads/Master'
        run: |
          # 替换为你的冒烟测试命令
          echo "执行自动化冒烟测试"

示例2:Azure Pipelines

# 只监听Development和Master分支的推送事件
trigger:
  branches:
    include:
      - Development
      - Master

stages:
- stage: Build
  jobs:
  - job: Build_Job
    steps:
    - script: |
        # 替换为你的实际构建命令
        echo "执行项目构建"
      displayName: '构建项目'

    - script: |
        # 替换为你的单元测试命令
        echo "执行单元测试"
      displayName: '运行单元测试'
      # 仅Development分支执行此步骤
      condition: eq(variables['Build.SourceBranch'], 'refs/heads/Development')

- stage: Deploy_And_Test
  dependsOn: Build
  jobs:
  - job: Deploy_Test_Job
    steps:
    - script: |
        # 替换为你的测试服务器部署命令
        echo "部署到测试服务器"
      displayName: '部署到测试服务器'
      condition: eq(variables['Build.SourceBranch'], 'refs/heads/Development')

    - script: |
        # 替换为你的回归测试命令
        echo "执行自动化回归测试"
      displayName: '运行自动化回归套件'
      condition: eq(variables['Build.SourceBranch'], 'refs/heads/Development')

  - job: Deploy_Prod_Job
    steps:
    - script: |
        # 替换为你的生产服务器部署命令
        echo "部署到生产服务器"
      displayName: '部署到生产服务器'
      condition: eq(variables['Build.SourceBranch'], 'refs/heads/Master')

    - script: |
        # 替换为你的冒烟测试命令
        echo "执行自动化冒烟测试"
      displayName: '运行自动化冒烟套件'
      condition: eq(variables['Build.SourceBranch'], 'refs/heads/Master')

关键注意事项

  • 分支触发控制:先配置只监听目标分支的事件,避免无关分支触发流程。
  • 条件语法差异:不同CI工具的分支变量和条件判断语法不同,比如GitLab CI用$CI_COMMIT_BRANCH判断分支,需根据所用工具调整。
  • 步骤隔离:通过条件判断确保每个分支只执行自己专属的步骤,不会互相干扰。
  • 复用公共逻辑:把两个分支都需要的操作(如构建)放在公共阶段,减少重复代码,便于维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 05:25:15