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

GitLab CI报错:bundle无法找到本地已安装的指定gem

故障原因分析

核心问题是镜像构建时安装的gem版本与测试阶段代码要求的版本不匹配,具体细节如下:

1. 镜像构建未锁定依赖版本

镜像构建日志显示安装的是较新的gem版本:

+ bundle install
Fetching gem metadata from https://rubygems.org/............
Resolving dependencies...
[... stuff removed]
Installing passenger 6.0.15 with native extensions
Fetching rack-protection 3.0.2
Installing rack-protection 3.0.2
Fetching sinatra 3.0.2
Installing sinatra 3.0.2
Fetching sinatra-contrib 3.0.2
Installing sinatra-contrib 3.0.2
Bundle complete! 6 Gemfile dependencies, 16 gems now installed.

但测试阶段报错要求的是旧版本:

/usr/local/bundle/gems/bundler-2.3.23/lib/bundler/definition.rb:508:in `materialize': 
Could not find
 passenger-6.0.14,
 sinatra-2.2.1,
 sinatra-contrib-2.2.1,
 haml-5.2.2,
 mustermann-1.1.2,
 rack-protection-2.2.1,
 tilt-2.0.10 
in locally installed gems (Bundler::GemNotFound)

这说明构建backoffice image时,你没有将项目的Gemfile.lock文件复制到镜像中,仅执行了bundle install。如果Gemfile里没有指定严格的版本约束(比如只写gem 'sinatra'而非gem 'sinatra', '2.2.1'),Bundler会自动拉取RubyGems上的最新兼容版本,导致镜像里的gem版本随时间推移自动更新。

2. 测试阶段依赖旧版本锁定文件

测试任务运行时,使用的是代码仓库中留存的旧版Gemfile.lock——该文件是几周前生成的,锁定了当时的gem版本。当Bundler根据这个旧锁文件检查镜像中的gem时,发现版本完全不匹配,因此抛出Bundler::GemNotFound错误。

验证建议

你可以通过以下操作确认问题:

  • 查看当前代码仓库内的Gemfile.lock,确认其中的gem版本是否与测试报错的版本一致
  • 检查镜像构建的CI步骤,确认是否遗漏了将Gemfile.lock复制到镜像中的操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:25:50