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

GitLab CI配置:主分支自动执行作业,其他分支允许手动触发

GitLab CI 配置:主分支自动执行,其他分支手动触发作业

要实现这个需求,核心是利用GitLab CI的rules配置项,通过分支判断结合手动触发条件来控制作业的执行逻辑。以下是具体实现方案:

核心配置思路

通过rules定义两条规则:

  1. 当流水线运行在主分支(比如main或master)时,作业自动执行。
  2. 当流水线运行在其他分支时,作业仅允许手动触发。

完整配置示例

创建或修改项目根目录下的.gitlab-ci.yml文件,示例如下:

stages:
  - build
  - test

# 构建作业
build:
  stage: build
  script:
    - echo "执行构建步骤..."
    - # 替换为你的实际构建命令,比如 npm install && npm run build
  rules:
    - if: '$CI_COMMIT_BRANCH == "main"' # 匹配主分支,自动执行
      when: on_success
    - if: '$CI_COMMIT_BRANCH != "main" && $CI_COMMIT_TAG == null' # 非主分支且非标签,手动触发
      when: manual
      allow_failure: false # 可选:强制必须触发并成功,否则流水线失败

# 测试作业
test:
  stage: test
  script:
    - echo "执行测试步骤..."
    - # 替换为你的实际测试命令,比如 npm test
  rules:
    - if: '$CI_COMMIT_BRANCH == "main"'
      when: on_success
    - if: '$CI_COMMIT_BRANCH != "main" && $CI_COMMIT_TAG == null'
      when: manual
      allow_failure: false

配置细节说明

  • 分支匹配:将"main"替换为你项目实际的主分支名称(比如"master")。
  • when: manual:标记作业为手动触发,只有在GitLab流水线界面点击"运行"按钮后才会执行。
  • allow_failure:
    • 设置为false时,手动作业必须执行成功,整个流水线才能标记为成功。
    • 设置为true时,即使不触发该作业,流水线也能正常完成(适合非必须的辅助作业)。
  • 排除标签:规则中加入$CI_COMMIT_TAG == null是为了避免标签触发的流水线应用手动规则,如果你不需要排除标签,可以去掉这个条件。

扩展:针对合并请求的调整

如果需要在合并请求目标为主分支时自动执行作业,可以在rules中添加额外规则:

rules:
  - if: '$CI_COMMIT_BRANCH == "main"'
    when: on_success
  - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "main"'
    when: on_success # MR目标为主分支时自动执行
  - if: '$CI_COMMIT_BRANCH != "main" && $CI_COMMIT_TAG == null'
    when: manual
    allow_failure: false

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:02:36