如何在单个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
相关产品推荐
相关产品推荐

