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

GitLab CI 推送无作业排队时如何保留上次流水线状态以正常合并分支

解决方案

GitLab针对该场景提供了两种可行方案,均可满足无需执行全量构建即可通过合并检查的需求:

方案1:复用最近成功流水线状态

该方案无需修改.gitlab-ci.yml配置,仅需调整项目合并请求设置:

  1. 进入项目页,依次打开「设置」→「合并请求」
  2. 在「合并选项」分类下找到「流水线必须成功才可合并」的相关配置,勾选「无新生成流水线时复用最近一次成功的流水线状态」(不同GitLab版本选项名称略有差异,部分版本显示为「允许跳过无新流水线分支的状态检查」)

该方案仅适用于GitLab 13.2及以上版本,优势是配置成本极低,无需修改CI规则。

方案2:配置兜底dummy作业(兼容性更高,更推荐)

该方案通过新增一个零成本的兜底作业,保证每次推送/提交合并请求时一定会生成成功状态的流水线,完全适配所有GitLab版本,修改后的.gitlab-ci.yml参考配置如下:

# 保留你原有的Unity构建作业配置
unity-build:
  stage: build
  script:
    # 原有构建命令保持不变
    - echo "执行Unity构建逻辑"
  rules:
    - changes:
        - Assets/*
        - Packages/*
        - ProjectSettings/*
        - .gitlab-ci.yml
      when: always

# 新增兜底作业
no-build-required:
  stage: .pre # 内置最高优先级阶段,执行速度极快
  script:
    - echo "本次提交无需要构建的文件变更,直接通过流水线校验"
    - exit 0
  rules:
    # 当存在需要构建的文件变更时,不执行该作业
    - if: $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "merge_request_event"
      changes:
        paths:
          - Assets/*
          - Packages/*
          - ProjectSettings/*
          - .gitlab-ci.yml
      when: never
    # 其余场景均执行该作业
    - when: always

该作业每次执行仅需几毫秒,几乎不占用CI资源,且可以100%保证每次提交都会生成对应流水线,不会出现合并页面卡住等待流水线状态的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:54:03