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

GitLab CI实现无重复分支与MR流水线及条件化构建

GitLab CI 完整配置方案

以下是完全匹配需求的GitLab CI配置,已解决重复流水线问题并满足所有作业触发规则:

# 全局流水线触发规则:控制哪些场景会创建流水线,避免重复
workflow:
  rules:
    # 允许main分支的推送(包括直接提交和MR合并后的推送)
    - if: '$CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "branch_push"'
    # 允许特性分支的推送(无论是否存在开放MR,排除标签推送)
    - if: '$CI_COMMIT_BRANCH != "main" && $CI_PIPELINE_SOURCE == "branch_push" && $CI_COMMIT_TAG == null'
    # 其他所有场景(标签、新建MR、定时任务等)禁止创建流水线
    - if: 'true'
      when: never

# 1. 预构建测试:始终作为首个作业执行,失败则终止流水线
pre-build tests:
  stage: .pre
  script:
    - # 替换为你的预构建测试命令,比如单元测试、代码检查等
    - echo "Executing pre-build tests..."
  allow_failure: false
  rules:
    - if: 'true'  # 只要流水线被触发就强制运行

# 2. 构建作业:main分支自动运行,特性分支手动触发
build:
  stage: build
  script:
    - # 替换为你的构建命令
    - echo "Building project..."
  rules:
    # main分支流水线:预测试通过后自动执行
    - if: '$CI_COMMIT_BRANCH == "main"'
      when: on_success
    # 特性分支流水线:需手动触发
    - if: '$CI_COMMIT_BRANCH != "main"'
      when: manual
      allow_failure: false  # 若手动触发构建,失败则阻断后续部署

# 3. 生产部署:所有场景仅手动运行,依赖构建作业
deploy to production:
  stage: deploy
  script:
    - # 替换为你的生产部署命令
    - echo "Deploying to production..."
  dependencies: [build]
  rules:
    - if: 'true'
      when: manual
      allow_failure: false

关键配置说明

  1. 避免重复流水线:
    通过workflow:rules禁用了merge_request_event类型的流水线,确保MR合并到main时,仅触发main分支的推送流水线,不会同时生成MR流水线和main分支流水线,彻底解决重复问题。

  2. 预构建测试规则:
    利用.pre阶段的优先级,确保该作业始终是流水线的第一个任务;allow_failure: false保证测试失败时直接终止后续所有作业,符合要求。

  3. 构建作业分支差异化规则:

    • main分支:通过when: on_success实现预测试通过后自动执行构建
    • 特性分支:通过when: manual强制要求手动触发构建,避免不必要的自动构建消耗资源
  4. 部署作业规则:

    • 全局手动触发:所有场景下都需要手动确认才能执行部署
    • dependencies: [build]确保只有构建成功后才能触发部署,避免无构建产物的无效部署
  5. 触发场景覆盖:

    • ✅ 直接推送提交至main:触发main分支流水线
    • ✅ MR合并至main:触发main分支流水线(无重复)
    • ✅ 推送特性分支(无论是否有开放MR):触发对应特性分支流水线
    • ❌ 新建MR:不触发流水线
    • ❌ 标签推送:不触发流水线
    • ❌ 其他场景(定时任务、API触发等):不触发流水线

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:00:49