2016-05-03 2 views
1

Я использую gitlab.com и CI с совместно используемым проводником докеров, который запускает тесты для моего проекта Ruby on Rails на каждой фиксации, чтобы справиться. Я заметил, что около 90% времени сборки расходуется на 'bundle install'. Возможно ли каким-то образом кешировать установленные драгоценные камни между фиксациями, чтобы ускорить установку пакета?Gitlab CI: Возможно ли ускорить установку пакета?

UPDATE:

Чтобы быть более конкретным, ниже содержание моего .gitlab-ci.yml. Первые три строки сценария «test» занимают около 90% времени, делая прогон сборки в течение 4-5 минут.

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 

ответ

0

Я не знаю, если у вас есть особые требования к делать APT-получить все время, если это не требуется создать свой собственный dockerfile с этими командами в нем , Так что ваша база уже имеет эти пакеты обновлений/nodejs. Если вы хотите позже обновить, вы всегда можете обновить свой файл док-станции.

Для ваших драгоценных камней, если вы хотите, чтобы это было быстрее, вы можете кэшировать их между сборками тоже. Обычно это для каждого задания и для каждой ветви. Смотрите пример здесь http://doc.gitlab.com/ee/ci/yaml/README.html#cache

cache: 
    paths: 
    - /cache 

Я предпочитаю, чтобы добавить key: "$CI_BUILD_REF_NAME" так, что для этой конкретной отрасли мои файлы кэшируются. См. environments, чтобы узнать, какие ключи вы можете использовать больше.

0

Вы можете установить переменную окружения BUNDLE_PATH и указать его в папку, где вы хотите, чтобы ваши драгоценные камни должны быть установлены. При первом запуске bundle install он установит все драгоценные камни, и последующие прогоны будут проверять, есть ли какие-либо новые драгоценные камни и устанавливать только те.

Примечание: Предполагается, что это поведение по умолчанию. Проверьте значение env var BUNDLE_PATH. Является ли он изменен на временную папку для фиксации или что-то еще? Или, есть 90% времени сборки тратится на скачивание метаданных gem из rubygems.org? В этом случае вам может потребоваться использовать флаг --local (но не уверен, что это хорошая идея на сервере CI).

Fetching source index for https://rubygems.org/ 

После просмотра в вашем .gitlab-ci.yml я заметил, что ваши --path опции отсутствует =. Я думаю, что это должно быть:

 - bundle install --path=/cache 
+0

Ваш ответ по-прежнему применяется к стандартному листу CI, размещенному на gitlab.com? – andr111

+0

Yeap. Я заметил еще одну потенциальную причину. Обновлен мой ответ. – Uzbekjon

+0

Я верю, что '=' не требуется в документации: http://bundler.io/v1.3/bundle_install.html – andr111

Смежные вопросы