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

YAML中如何配置仅在特定分支发起Pull Request时运行stage

配置方法

不同CI/CD系统的YAML流水线语法略有差异,核心逻辑是同时校验两个条件:当前流水线触发源是Pull Request(GitLab中叫Merge Request)、PR的目标分支匹配你指定的分支规则,两个条件同时满足时才执行对应stage。下面给两种最常用场景的配置样例:

GitHub Actions 配置

如果用GitHub Actions做流水线,要实现「仅当PR目标分支为main、所有release/*前缀分支时,才执行deploy阶段」,配置如下:

name: Project CI
# 第一层校验:仅指定分支的PR事件才触发流水线
on:
  pull_request:
    branches:
      - 'main'
      - 'release/*'

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm run build

  # 需要条件触发的deploy阶段
  deploy:
    needs: build
    runs-on: ubuntu-latest
    # 第二层校验:双重确认触发源和目标分支,避免配置疏漏误触发
    if: ${{ github.event_name == 'pull_request' && (startsWith(github.base_ref, 'release/') || github.base_ref == 'main') }}
    steps:
      - run: npm run deploy:staging

GitLab CI 配置

如果用GitLab CI,对应配置如下:

stages:
  - build
  - deploy

build_job:
  stage: build
  script:
    - npm run build
  only:
    - merge_requests

# 仅当MR目标分支匹配规则时才执行deploy阶段
deploy_job:
  stage: deploy
  script:
    - npm run deploy:staging
  rules:
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event' && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == 'main' || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME =~ /^release\//)
      when: on_success
    - when: never

配置注意事项

  • 分支匹配支持通配符、正则两种写法,根据你用的CI系统语法选择即可
  • 不要只在事件触发层做过滤,建议在对应stage的执行条件里再加一层校验,避免其他触发源(比如手动触发、分支推送)意外跑起该阶段
  • 分支规则统一放在配置顶部维护,不要零散写在各个job的判断逻辑里,后续调整规则更方便

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:24:21