Heroku CI流水线 - 在构建之间缓存gems

7
我刚在Heroku上设置了一个Ruby on Rails应用程序,但是我遇到了一个CI设置性能问题,这非常令人烦恼。
在我们进行单元测试的设置过程中,Heroku总是重新安装我们的gems,生成类似以下的日志:
Fetching activestorage 6.0.2.2
Installing activestorage 6.0.2.2

在设置我们的应用程序时,情况并非如此,因为它会显示像这样的行:

Using activestorage 6.0.2.2

在这两种情况下,bundler 看起来都是使用正确的参数被调用:
(对于 CI 设置)
Running: bundle install --without development --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment

(用于应用程序设置)
Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment

在这两种情况下,我们都有这一行代码:
Bundled gems are installed into `./vendor/bundle`

所以,我想知道:你是否知道为什么Heroku在CI测试设置之间不缓存gems,而在我们应用程序的连续构建期间是这样的?

如果是,有没有一种方法可以强制重复使用先前在我们的CI管道中安装的gems?这需要很多时间,可以从中受益。

非常感谢。


你的测试通过了吗? - ErvalhouS
嗨,是的,只是安装过程比较慢。 - Alexis Clarembeau
2个回答

1

询问了Heroku团队后,发现这是Ruby构建包中的一个错误。现在已经修复,可以正常使用。 构建包创建者可以在CI构建之间缓存数据,只是在其中一个升级期间关闭了此功能。


这是修复的PR链接:https://github.com/heroku/heroku-buildpack-ruby/pull/978 - Eliot Sykes

0
Heroku在CI测试设置之间不缓存gem。
Heroku文件系统是一个短暂的文件系统。当您运行测试时,会启动一个带有全新操作系统的dyno。然后,Heroku安装所有依赖项并启动您的测试。
我认为这是所有CI平台的常见情况。每次运行测试时,它们都会通过安装所有依赖项来从头开始启动新环境。
其中一个理由可能是测试会在不同级别上更改许多数据。因此,CI提供商从头开始启动,以便先前的测试残留数据不会干扰当前运行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接