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

如何配置GitLab作业:默认手动,仅合并列车流水线自动执行?

问题

我们正尝试在企业GitLab中搭建完善的Merge Train(合并列车)配置。当前流水线中有若干执行资源消耗较大的fuzzy tests(模糊测试)作业,这些作业无需在每次推送时运行,但需在合并前执行,且支持手动触发。

目前这些作业在通用流水线中标记为手动,配置如下:

fuzzy-tests:
  rules:
    - if: $CI_PIPELINE_SOURCE == "schedule"
      when: never
    - if: >
        $CI_COMMIT_TAG ||
        $CI_COMMIT_BRANCH == 'main' ||
        $CI_COMMIT_BRANCH == 'release/*' ||
        $PUBLISH_DEV_VERSION
      when: on_success
    - when: manual

我们希望这些作业在Merge Train流水线中自动运行,无需手动触发。请问能否通过rules判断当前作业是否处于Merge Train流水线环境?若无法实现,是否有合适方案确保fuzzy-tests作业在每次合并前至少运行一次、可按需触发,且不会在合并请求每次变更时执行?

解决方案

直接通过GitLab环境变量识别Merge Train

GitLab 14.5及以上版本提供了$CI_MERGE_REQUEST_EVENT_TYPE环境变量,当流水线由Merge Train触发时,该变量值为merge_train。可以直接在作业规则中加入该判断,让fuzzy-tests在Merge Train中自动执行:

fuzzy-tests:
  rules:
    - if: $CI_PIPELINE_SOURCE == "schedule"
      when: never
    - if: >
        $CI_COMMIT_TAG ||
        $CI_COMMIT_BRANCH == 'main' ||
        $CI_COMMIT_BRANCH == 'release/*' ||
        $PUBLISH_DEV_VERSION ||
        $CI_MERGE_REQUEST_EVENT_TYPE == "merge_train"  # 新增Merge Train自动执行条件
      when: on_success
    - when: manual

低版本GitLab替代方案

如果你的GitLab版本低于14.5,不支持上述变量,可以用以下两种方式:

  • 匹配Merge Train临时分支:Merge Train生成的临时分支默认以merge-train/开头,可通过分支名规则识别:
fuzzy-tests:
  rules:
    - if: $CI_PIPELINE_SOURCE == "schedule"
      when: never
    - if: >
        $CI_COMMIT_TAG ||
        $CI_COMMIT_BRANCH == 'main' ||
        $CI_COMMIT_BRANCH == 'release/*' ||
        $PUBLISH_DEV_VERSION ||
        $CI_COMMIT_BRANCH =~ /^merge-train\//  # 匹配Merge Train临时分支前缀
      when: on_success
    - when: manual
  • 结合合并请求审批规则强制校验:在项目设置的「合并请求」-「审批规则」中,添加“需要通过特定作业”的规则,指定fuzzy-tests必须成功完成。这样即使普通MR流水线中作业是手动触发的,也必须手动运行一次并通过后才能合并,同时Merge Train中自动执行的作业也会满足审批要求,确保合并前至少运行一次。

额外优化:拆分作业逻辑

如果需要更清晰的职责划分,可以将模糊测试拆分为两个作业:一个保留手动触发逻辑,另一个仅在Merge Train中自动执行:

# 复用基础配置的模板
.fuzzy-tests-base:
  script:
    - # 模糊测试执行命令

# 手动触发的模糊测试作业(供普通MR按需运行)
fuzzy-tests-manual:
  extends: .fuzzy-tests-base
  rules:
    - if: $CI_PIPELINE_SOURCE == "schedule"
      when: never
    - if: >
        $CI_COMMIT_TAG ||
        $CI_COMMIT_BRANCH == 'main' ||
        $CI_COMMIT_BRANCH == 'release/*' ||
        $PUBLISH_DEV_VERSION
      when: on_success
    - when: manual

# Merge Train专属自动执行的模糊测试作业
fuzzy-tests-merge-train:
  extends: .fuzzy-tests-base
  rules:
    - if: $CI_MERGE_REQUEST_EVENT_TYPE == "merge_train"
      when: on_success
    - when: never

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 18:37:26