Ruby gems fail to cache on CI
@aqualls noticed this warning in a CI job log:
WARNING: vendor/bundle: no matching files. Ensure that the artifact path is relative to the working directory (/builds/gitlab-org/gitlab-docs)
We run bundle config set --local deployment true
in the .bundle
and .bundle_and_yarn
jobs prior to installing our gems, which we'd expect to signal that we want gems to go into vendor/bundle
. However, gems are actually being downloaded to /usr/local/bundle/gems/
.
Since we're trying to cache vendor/bundle
, this causes the warning, and it also means we aren't getting the benefits of caching these dependencies.
We can see the actual install location by adding some debugging lines after bundle install
in the .bundle
job:
$ echo $GEM_HOME
/usr/local/bundle
$ bundle info rack
* rack (3.0.8)
...
Path: /usr/local/bundle/gems/rack-3.0.8
...
Example pipeline with debugging output: https://gitlab.com/gitlab-org/gitlab-docs/-/jobs/4642482354#L300
Expected behavior
Ruby gems are cached, so that they can be reused in subsequent CI jobs.
Actual behavior
No gems are cached, and a warning appears in the logs.
Possible fixes
- Cache
/usr/local/bundle/gems
instead ofvendor/bundle
- Set the
BUNDLE_PATH
environment variable tovendor/bundle
With either of these, we can also remove the bundle config set
command since it isn't working as expected. If I run that locally and install gems, they do go into vendor/bundle
, but for some reason, it is not having the desire affect on the pipeline.