Heroku CI Pipeline - 在构建之间缓存 gems

Ale*_*eau 7 ruby rubygems ruby-on-rails heroku

我刚刚在 Heroku 上设置了一个 Ruby on Rails 应用程序,但是,我遇到了 CI 设置性能问题,这很烦人。

在设置我们的单元测试期间,Heroku 总是重新安装我们的 gems,生成如下日志:

Fetching activestorage 6.0.2.2
Installing activestorage 6.0.2.2
Run Code Online (Sandbox Code Playgroud)

设置我们的应用程序时不是这种情况,因为它显示的是这样的行:

Using activestorage 6.0.2.2
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,bundler 看起来都使用正确的参数调用:

(用于 CI 设置)

Running: bundle install --without development --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment
Run Code Online (Sandbox Code Playgroud)

(用于应用程序设置)

Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我们都有这样的行:

Bundled gems are installed into `./vendor/bundle`
Run Code Online (Sandbox Code Playgroud)

所以,我想知道:你知道为什么 Heroku 不在 CI 测试设置之间缓存 gems,而在我们的应用程序的后续构建过程中是这样吗?如果是,有没有办法强制重用以前安装在我们 CI 管道中的 gem?这需要花费大量时间,并且可以从中受益。

非常感谢

asi*_*hmi 0

Heroku 不会在 CI 测试设置之间缓存 gem

Heroku 文件系统是一个临时文件系统。当您运行测试时,测功机将与全新的操作系统一起启动。然后 heroku 安装所有依赖项并开始测试。

我认为这是所有 CI 平台的常见场景。每次我们运行测试时,他们都会通过安装所有依赖项从一开始就启动一个新环境。

这样做的一个理由可能是测试会在不同级别上更改大量数据。因此 CI 提供商从头开始,以便以前的测试残留数据不会干扰当前的运行。