Embedded bundler using already set env variables for operation
We are embedding bundler 1.13.7 inside our package, to be used with gitlab-*
commands, like gitlab-rake
(which basically does a bundle exec rake
). This bundler will basically use the BUNDLER*
env variables, if found. This can cause issues if these gitlab-*
commands are used inside another bundle context. For example, consider a project using bundler
$ bundler --version
Bundler version 1.13.6
$ /opt/gitlab/embedded/bin/bundler --version
Bundler version 1.13.7
$ bundle exec ruby -e "system('gitlab-rake gitlab:db:configure')"
bundler: failed to load command: rake (/opt/gitlab/embedded/bin/rake)
Gem::LoadError: You have already activated bundler 1.13.7, but your Gemfile requires bundler 1.13.6. Prepending `bundle exec` to your command may solve this.
/var/lib/gems/2.1.0/gems/bundler-1.13.6/lib/bundler/runtime.rb:40:in `block in setup'
/var/lib/gems/2.1.0/gems/bundler-1.13.6/lib/bundler/runtime.rb:25:in `map'
/var/lib/gems/2.1.0/gems/bundler-1.13.6/lib/bundler/runtime.rb:25:in `setup'
/var/lib/gems/2.1.0/gems/bundler-1.13.6/lib/bundler.rb:99:in `setup'
/var/lib/gems/2.1.0/gems/bundler-1.13.6/lib/bundler/setup.rb:10:in `<top (required)>'
/opt/gitlab/embedded/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
/opt/gitlab/embedded/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
This is basically because bundle exec
will set certain env variables like BUNDLE_BIN_PATH
, BUNDLE_GEMFILE
, BUNDLER_VERSION
, RUBYLIB
etc which can impact the internal gitlab-rake
command. It means, gitlab-rake used gems from a different path than we expected it to.
What is surprising is that, in the source code of gitlab-rake, we are actively unsetting these env variables - config/templates/gitlab-rails/bundle_exec_wrapper.erb. Still, why this occurs is unknown.