Русский
Русский
English
Статистика
Реклама

Перевод Кеширование гемов Ruby в GitHub Actions с использованием rubysetup-ruby или actionscache

Как, загружая гемы Ruby из кеша в GitHub Actions, ускорить запуск сборки проекта в этой системе непрерывной интеграции (CI)? Если суметь подготовить к работе все зависимости Ruby on Rails (RoR)-проекта в кратчайшие сроки, это позволит сократить время, необходимое на запуск тестов для такого проекта. Тут-то нам и пригодится кеширование. Гемы Ruby, нужные в проекте, можно кешировать средствами GitHub Actions, благодаря чему их, при запуске CI-конвейера, можно будет загрузить гораздо быстрее, чем прежде. Существует два способа кеширования гемов Ruby, применимых при использовании CI GitHub Actions. Один из них предусматривает применение ruby/setup-ruby, а второй actions/cache.

  • actions/cache это популярное решение для кеширования гемов Ruby.
  • ruby/setup-ruby это решение, направленное на установку конкретной версии Ruby и на кеширование гемов Ruby с помощью бандлера. Фактически, речь идёт о двух возможностях одного экшена (того, что в терминологии GitHub Actions называется action).



Actions/cache кеширование зависимостей и больше ничего


Actions/cache это популярное решение, которое может быть использовано для размещения данных в кеше и для их извлечения из кеша при очередном запуске процесса сборки проекта в CI-системе. Часто этот экшен используют для RoR-проектов, в которых, кроме того, для управления версиями Ruby в GitHub Actions, используется экшн actions/setup-ruby.

Рассмотрим пример конфигурационного файла для организации кеширования в GitHub Actions, в котором используется actions/cache:

# .github/workflows/main.ymlname: Mainon: [push, pull_request]jobs:test:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v2- uses: actions/cache@v2with:path: vendor/bundlekey: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}restore-keys: |${{ runner.os }}-gems-- name: Bundle installenv:RAILS_ENV: testrun: |bundle config path vendor/bundlebundle install --jobs 4 --retry 3

Разберём основные особенности этого файла:

  • Нужно указать путь к директории, которую требуется кешировать. В нашем случае это vendor/bundle.
  • Кроме того, тут мы генерируем уникальный ключ (key) кеша, применяя при этом сведения о версии операционной системы и о файле Gemfile.lock. Изменение версии операционной системы или установка нового гема, из-за чего изменяется Gemfile.lock, приводит к генерированию нового значения key.
  • Далее, надо настроить бандлер так, чтобы он устанавливал бы все наши гемы Ruby в директорию vendor/bundle.
  • Тут можно использовать следующие параметры бандлера:

Если вам интересно взглянуть на полные YAML-файлы с настройками GitHub Actions для Rail-проектов вот, вот, вот и вот несколько наших статей на эту тему.

Ruby/setup-ruby установка Ruby и кеширование гемов


Выше мы упоминали о том, что в RoR-проектах часто используется actions/setup-ruby. Но экшен actions/setup-ruby был объявлен устаревшим. Вместо него в наши дни рекомендуется пользоваться экшеном ruby/setup-ruby. В нём, помимо прочих возможностей, имеется и возможность кеширования данных. Вот как выглядит конфигурационный файл, рассчитанный на использование ruby/setup-ruby:

# .github/workflows/main.ymlname: Mainon: [push, pull_request]jobs:test:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v2- uses: ruby/setup-ruby@v1with:# Не нужно при наличии файла.ruby-versionruby-version: 2.7# запускает 'bundle install' и автоматически кеширует установленные гемыbundler-cache: true# запуск RSpec-тестов- run: bundle exec rspec

Как видите, этот вариант организации кеширования гемов проще того, что мы описали в предыдущем разделе. И тут, кроме того, в нашем распоряжении оказывается система управления версиями Ruby. В сущности, если говорить о кешировании гемов, всё сводится к добавлению в конфигурационный файл строчки bundler-cache: true.

А вот что можно узнать, обратившись к документации по ruby/setup-ruby:

Можно, кроме того, кешировать гемы вручную, но поступать так не рекомендуется. При таком подходе, во-первых, увеличиваются объёмы конфигурационных файлов, а во-вторых вручную очень сложно настроить кеширование правильно. В расчёт нужно принять много всего, а это значит, что actions/cache никогда не бывает достаточно для кеширования гемов (например речь идёт о неполных ключах кеша, об удалении старых гемов при восстановлении данных с использованием ключа, отличающегося от текущего, о корректном хешировании .lock-файлов, сведения об изменениях которых не внесены в систему контроля версий, об учёте версии ОС, о принятии во внимание вопросов ABI-совместимости для ruby-head и так далее). Поэтому, пожалуйста, вместо ручной настройки кеширования, пользуйтесь опцией bundler-cache: true

Итоги


Мы рассмотрели два способа кеширования гемов Ruby в CI GitHub Actions. Надеемся, что тот, кто нуждается в ускорении сборки Ruby-проектов, нашёл здесь пищу для размышлений. Но, конечно, есть и другие способы ускорения CI-конвейеров, например параллельное выполнение тестов.

Пользуетесь ли вы GitHub Actions?

Источник: habr.com
К списку статей
Опубликовано: 17.04.2021 16:06:40
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Блог компании ruvds.com

Разработка веб-сайтов

Ruby

Программирование

Разработка

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru