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

如何在单个Pipeline中按分支操作触发对应阶段执行?

单个Pipeline实现分支触发不同阶段的方案

当然可以实现,主流CI/CD工具(比如GitHub Actions、GitLab CI、Jenkins)都支持在单个Pipeline里通过分支触发规则+阶段条件判断,精准控制不同场景下执行对应的Stage。以下是具体操作方案:

GitHub Actions 实现步骤

  1. 项目根目录创建.github/workflows/pipeline.yml,先配置触发条件:
    on:
      push:
        branches:
          - qa          # PR合并到qa分支会触发push事件
          - 'release/**' # 创建release开头的分支触发
          - 'hotfix/**'  # 创建hotfix开头的分支触发
    
  2. 定义对应Stage的任务,通过if条件判断执行逻辑:
    jobs:
      stage-a:
        runs-on: ubuntu-latest
        if: github.ref == 'refs/heads/qa' # 仅qa分支触发时执行
        steps:
          - name: 执行Stage A任务
            run: |
              echo "部署到QA环境"
              # 替换成你的实际命令(比如构建、部署脚本)
    
      stage-b:
        runs-on: ubuntu-latest
        if: startsWith(github.ref, 'refs/heads/release/') || startsWith(github.ref, 'refs/heads/hotfix/')
        steps:
          - name: 执行Stage B任务
            run: |
              echo "生成预发布包"
              # 替换成你的实际命令(比如打包、版本同步)
    
    逻辑说明:PR合并到qa会触发push事件到qa分支,此时github.ref匹配refs/heads/qa,执行Stage A;创建release/hotfix分支时,分支名匹配前缀规则,执行Stage B。

GitLab CI 实现步骤

在项目根目录创建.gitlab-ci.yml:

stages:
  - stage_a
  - stage_b

# Stage A:仅qa分支合并时执行
stage_a_job:
  stage: stage_a
  only:
    - qa
  script:
    - echo "执行Stage A的构建/部署任务"
    # 你的实际执行脚本

# Stage B:仅release/*或hotfix/*分支执行
stage_b_job:
  stage: stage_b
  only:
    - /^release\/.*$/
    - /^hotfix\/.*$/
  script:
    - echo "执行Stage B的预发布准备任务"
    # 你的实际执行脚本

逻辑说明:GitLab中PR合并到qa分支后会触发对应分支的Pipeline,only关键字通过分支名/正则匹配,控制对应Stage的执行;创建release/hotfix分支时,分支名匹配正则,自动执行Stage B。

Jenkins 实现步骤

在Jenkins Pipeline脚本中使用when条件判断:

pipeline {
  agent any
  stages {
    stage('Stage A') {
      when {
        branch 'qa'
      }
      steps {
        echo "执行Stage A的任务"
        // 替换成你的实际步骤(比如调用构建脚本、部署到QA)
      }
    }
    stage('Stage B') {
      when {
        anyOf {
          branch 'release/**'
          branch 'hotfix/**'
        }
      }
      steps {
        echo "执行Stage B的任务"
        // 替换成你的实际步骤(比如打包发布包、触发预发布流程)
      }
    }
  }
}

同时在Jenkins项目的触发设置中,开启对应分支的推送触发:勾选“当分支有推送时触发”,并指定qa、release/*、hotfix/*分支作为触发源。

核心逻辑总结

不管用哪种工具,核心都是两步:

  • 第一步:配置Pipeline的触发规则,让它只在PR合并到qa分支、创建release/hotfix分支这两种场景下启动;
  • 第二步:给每个Stage添加分支条件判断,确保只有符合当前场景的分支触发时,才执行对应的Stage。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:40:36