在GitLab CI包构build中cachinggem

我正在使用Docker镜像来运行一堆存储库的testing。 每个存储库都有自己的testing,当然也有自己的Gemfile。 所以,基本上,每当我对这些存储库进行提交时,就开始一个新的构build。 在这个版本中,GitLab:

  1. 下载Docker镜像。
  2. 安装所有需要的gem。
  3. 运行testing。

Docker镜像有一些预装的包,比如ruby或者gcc,所以我不会在每次构build时重新安装这些包,但是我仍然需要安装所有的gem,因为每个仓库都有它自己的Gemfile,它们有点不一样。

事情是,我能做些什么来提高构build时间? 我使用build install命令浪费了大量的时间,并且大部分时间都是反复为每个存储库安装相同的软件包。

我不熟悉ruby,但是在某些语言中,你可以有一个本地caching来安装库。 如果你能用ruby做到这一点,我相信你可以。 您可以将此caching存储在主机(或数据容器)和通过卷caching到每个容器中的装载。

这是如何工作的。

您创buildcaching并将其装载到容器中,然后指出您的ruby应用程序在安装gem时使用此caching。 如果gem在caching中,它会在本地获取,如果不是则需要下载它。 现在它将在下次在当地可用。 本地caching应该更快(无需下载)。 由于您跨项目共享caching,因此应该缩短构build时间。

选项2:创build一个包含所有常见gem的基础图像,并将其用于testing。 这是很难保持同步,并导致臃肿的图像。