Gitlab CI:是否可以加速'bundle install'?
Gitlab CI: Is it possible to speed up 'bundle install'?
我将 gitlab.com 和 CI 与共享的 docker 运行 一起使用,运行s 在 [=] 上测试我的 Ruby 28=] 每次提交到 master 的项目。我注意到大约 90% 的构建时间花在 'bundle install' 上。是否有可能以某种方式在提交之间缓存已安装的 gem 以加速 'bundle install'?
更新:
更具体的,下面是我的.gitlab-ci.yml的内容。 'test' 脚本的前 3 行占用了构建 运行 4-5 分钟的大约 90% 的时间。
image: ruby:2.2.4
services:
- postgres
test:
script:
- apt-get update -qy
- apt-get install -y nodejs
- bundle install --path /cache
- bundle exec rake db:drop db:create db:schema:load RAILS_ENV=test
- bundle exec rspec
您可以设置 BUNDLE_PATH
环境变量并将其指向要安装 gem 的文件夹。第一次 运行 bundle install
它将安装所有 gems 并且随后的 运行s 将只检查是否有任何新的 gems 并且只安装那些.
注意:这应该是默认行为。检查您的 BUNDLE_PATH
环境变量值。是否将其更改为每个提交文件夹的临时文件夹或其他内容?或者,90% 的构建时间 是否用于从 rubygems.org 下载 gem 元信息?在这种情况下,您可能要考虑使用 --local
标志(但不确定这在 CI 服务器上是否是个好主意)。
Fetching source index for https://rubygems.org/
在查看了您的 .gitlab-ci.yml
之后,我发现您的 --path
选项缺失 =
。我认为应该是:
- bundle install --path=/cache
我不知道您是否对一直执行 apt-get 有特殊要求,如果不需要,请创建您自己的 dockerfile,其中包含这些命令。这样您的基地就已经有了 updates/nodejs 个包裹。如果您想稍后更新,您可以随时再次更新您的 dockerfile。
对于您的 gem,如果您希望它更快,您也可以在构建之间缓存它们。通常这是每个工作和每个分支。请参阅此处的示例 http://doc.gitlab.com/ee/ci/yaml/README.html#cache
cache:
paths:
- /cache
我更喜欢添加 key: "$CI_BUILD_REF_NAME"
以便为该特定分支缓存我的文件。请参阅 environments 了解您可以使用更多的键。
我将 gitlab.com 和 CI 与共享的 docker 运行 一起使用,运行s 在 [=] 上测试我的 Ruby 28=] 每次提交到 master 的项目。我注意到大约 90% 的构建时间花在 'bundle install' 上。是否有可能以某种方式在提交之间缓存已安装的 gem 以加速 'bundle install'?
更新:
更具体的,下面是我的.gitlab-ci.yml的内容。 'test' 脚本的前 3 行占用了构建 运行 4-5 分钟的大约 90% 的时间。
image: ruby:2.2.4
services:
- postgres
test:
script:
- apt-get update -qy
- apt-get install -y nodejs
- bundle install --path /cache
- bundle exec rake db:drop db:create db:schema:load RAILS_ENV=test
- bundle exec rspec
您可以设置 BUNDLE_PATH
环境变量并将其指向要安装 gem 的文件夹。第一次 运行 bundle install
它将安装所有 gems 并且随后的 运行s 将只检查是否有任何新的 gems 并且只安装那些.
注意:这应该是默认行为。检查您的 BUNDLE_PATH
环境变量值。是否将其更改为每个提交文件夹的临时文件夹或其他内容?或者,90% 的构建时间 是否用于从 rubygems.org 下载 gem 元信息?在这种情况下,您可能要考虑使用 --local
标志(但不确定这在 CI 服务器上是否是个好主意)。
Fetching source index for https://rubygems.org/
在查看了您的 .gitlab-ci.yml
之后,我发现您的 --path
选项缺失 =
。我认为应该是:
- bundle install --path=/cache
我不知道您是否对一直执行 apt-get 有特殊要求,如果不需要,请创建您自己的 dockerfile,其中包含这些命令。这样您的基地就已经有了 updates/nodejs 个包裹。如果您想稍后更新,您可以随时再次更新您的 dockerfile。
对于您的 gem,如果您希望它更快,您也可以在构建之间缓存它们。通常这是每个工作和每个分支。请参阅此处的示例 http://doc.gitlab.com/ee/ci/yaml/README.html#cache
cache:
paths:
- /cache
我更喜欢添加 key: "$CI_BUILD_REF_NAME"
以便为该特定分支缓存我的文件。请参阅 environments 了解您可以使用更多的键。