Gitlab合并代码分支时流水线出现双”pipeline”

Gitlab合并代码分支时流水线出现双”pipeline”

背景

最近开发反馈在合并代码触发流水线时经常出现双pipeline,并且这两个pipeline中有一个是正常走流程,但有一个却只有一个push image的job,以下是正常流水线的简易流程

屏幕截图 2025-04-17 101251

但是在合并代码时却出现了以下问题

屏幕截图 2025-04-17 101655

在上面的两个流水线中有一个只出现了一个job,并且这两个流水线所触发的git hash值是一致的。

屏幕截图 2025-04-17 101838

百思不得其解的查资料时发现官方时这样说的

GitLab 会在 合并 MR 成功后 做两件事(视配置不同而定):

  • 触发 MR 合并前的 MR Pipeline
  • MR 合并后会 push commit 到目标分支,于是再触发一个 push pipeline

所以我们在一个 MR 合并过程中会看到两个 pipeline

类型 是否预期 说明
MR pipeline (merge_request_event) ✅ 是的 真正的、提前跑的 pipeline
合并后 Push 产生的 pipeline (push) ✅ 也是的 GitLab 合并时自动 push 到目标分支导致

但我们要的是合并后Push产生的pipeline,更具官方的说法我们可以使用自带的CI_PIPELINE_SOURCE 变量来触发是否执行pipeline

1

上图首先build和push阶段先判断是否为合并后 Push 产生的 pipeline,然后在build阶段只要提交到对应分支即可触发jod,在push阶段只有提交到非"develop_*"分支才会自动触发jod否侧需手动触发 (因为开发频繁提交代码,有些功能还没有完全开发完成,频繁在"develop_*"分支推送到镜像仓库会产生很多垃圾镜像并占用镜像仓库存储) 

配置完成后再来看流水线的状态就不会在出现合并分支后出现双pipeline

屏幕截图 2025-04-24 105913

© 版权声明
THE END
喜欢就支持一下吧
点赞62赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容