我正在使用GitLab-CI/CD
构建我的Rails
应用程序。我注意到我的构建由于Using a custom path while using system gems is unsupported
错误而失败,该错误以前运行得很好。
试图检查较新的更新版本,但未发现任何问题。对最近的更新或提到的问题有任何想法吗?
同胞是我的gitlab-ci.yml
variables:
GIT_SUBMODULE_STRATEGY: recursive
cache:
key: ${CI_JOB_NAME}
paths:
- vendor/ruby
before_script:
- apt-get update -qq
- ruby -v
- which ruby
- gem --version
- git --version
- gem update --system 2.7.6
- gem install bundler -v 2.0.1
- bundle -v
- bundle config ${REPO_URL} ${BUNDLE_GITLAB__TOKEN}
- bundle config --global disable_shared_gems true
- bundle install --jobs $(nproc) "${FLAGS[@]}" --path vendor
rubocop:
tags:
- rubocop
script:
- bundle exec rubocop
# rspec:
# stage: test
# script:
# - bundle exec rspec
下面是我得到的简短错误
$ apt-get update -qq
$ ruby -v
ruby 2.5.5p157 (2019-03-15 revision 67260) [x86_64-linux]
$ which ruby
/usr/local/bin/ruby
$ gem --version
3.0.3
$ git --version
git version 2.20.1
$ gem update --system 2.7.6
Updating rubygems-update
Successfully installed rubygems-update-2.7.6
Installing RubyGems 2.7.6
Bundler 1.16.1 installed
RubyGems 2.7.6 installed
Regenerating binstubs
------------------------------------------------------------------------------
RubyGems installed the following executables:
/usr/local/bin/gem
/usr/local/bin/bundle
RubyGems system software updated
$ gem install bundler -v 2.0.1
Successfully installed bundler-2.0.1
1 gem installed
$ bundle -v
Bundler version 2.0.1
$ bundle config https://gitlab.com/dharshannn/test-star.git ${BUNDLE_GITLAB__TOKEN}
$ bundle config --global disable_shared_gems true
$ bundle install --jobs $(nproc) "${FLAGS[@]}" --path vendor
Using a custom path while using system gems is unsupported.
path:
Set for your local app (/usr/local/bundle/config): "vendor"
path.system:
Set via BUNDLE_PATH__SYSTEM: true
disable_shared_gems:
Set for the current user (/root/.bundle/config): true
ERROR: Job failed: exit code 1
答案 0 :(得分:9)
今天我也发生了同样的事情。我很确定没有对bundler
或gem
进行任何更新。但是,Docker映像已更新(我正在使用ruby:2.6.3
)。当这种情况开始发生时,我还添加了一个新的依赖项,因此我怀疑它依赖于已安装在系统路径中的gem,因此会出现错误消息。
您可以通过在.gitlab-ci.yml
中指定以下配置变量来解决此问题:
variables:
BUNDLE_DISABLE_SHARED_GEMS: "true"
BUNDLE_PATH__SYSTEM: "false"
这会将Bundler配置为不使用共享的gem,并完全禁用系统gem。
请参见https://bundler.io/v2.0/bundle_config.html
disable_shared_gems(BUNDLE_DISABLE_SHARED_GEMS):阻止Bundler访问安装到RubyGems正常位置的宝石。
和
path.system(BUNDLE_PATH__SYSTEM):Bundler是否将gems安装到默认系统路径(Gem.dir)中。