GitLab CI 推送无作业排队时如何保留上次流水线状态以正常合并分支
解决方案
GitLab针对该场景提供了两种可行方案,均可满足无需执行全量构建即可通过合并检查的需求:
方案1:复用最近成功流水线状态
该方案无需修改.gitlab-ci.yml配置,仅需调整项目合并请求设置:
- 进入项目页,依次打开「设置」→「合并请求」
- 在「合并选项」分类下找到「流水线必须成功才可合并」的相关配置,勾选「无新生成流水线时复用最近一次成功的流水线状态」(不同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
相关产品推荐
相关产品推荐

