Непрерывная интеграция
Вы можете тестировать свой сайт в окружениях с различными версиями Ruby. Следующий гид покажет вам, как настроить бесплатное сборочное окружение на Travis с интеграцией GitHub для пулл-реквестов. Для частных репозиториев существуют платные альтернативы.
1. Активация Travis и GitHub
Активация сборок Travis в вашем репозитории GitHub достаточно проста:
- Перейдите на страницу вашего профиля на travis-ci.org:
https://travis-ci.org/profile/username
. - Выберите репозиторий, для которого вы хотите активировать сборки.
- Кликните на слайдер справа, дождитесь сообщения “ON” и смены цвета на темно-серый.
- Опционально сконфигурируйте сборку нажав иконку с гаечным ключом. Дальнейшая информация будет в вашем файле
.travis.yml
, а детальное рассмотрение ниже.
2. Тестовый скрипт
Простейший тестовый скрипт запускает команду jekyll build
и показывает, что Jekyll может собрать сайт. Итоговый сайт не проверяется, показывается лишь правильность сборки.
При тестировании вывода Jekyll наиболее полезен html-proofer. Он проверяет ваш собранный сайт на наличие всех ссылок и изображений. Используйте его с командой htmlproofer
или напишите скрипт на Ruby, использующий этот gem.
Скрипт для запуска HTML Proofer
#!/usr/bin/env bash
set -e # halt script on error
bundle exec jekyll build
bundle exec htmlproofer ./_site
Некоторые опции могут быть определены прямо в командной строке. Информация об этом есть в README html-proofer
, также можно выполнить локально htmlproofer --help
.
Например, чтобы не тестировать ссылки на сторонние сайты, используйте следующую команду:
$ bundle exec htmlproofer ./_site --disable-external
Библиотека HTML Proofer
Вы также можете активировать HTML Proofer
в Rakefile
:
#!/usr/bin/env ruby
require 'html/proofer'
HTML::Proofer.new("./_site").run
Опции передаются как второй аргумент в .new
и в виде хэша Ruby. Подробно они описаны README html-proofer
.
3. Конфигурация ваших сборок Travis
Следующий файл используется для конфигурации ваших сборок в Travis. Так как Jekyll создан на Ruby и требует установки RubyGems, мы выберем окружение Ruby. Ниже показан пример файла .travis.yml
с объяснением каждой строки.
Примечание: вам нужен gemfile, а Travis автоматически установит все зависимости:
source "https://rubygems.org"
gem "jekyll"
gem "html-proofer"
language: ruby
rvm:
- 2.1
# Assume bundler is being used, install step will run `bundle install`.
script: ./script/cibuild
# branch whitelist
branches:
only:
- gh-pages # test the gh-pages branch
- /pages-(.*)/ # test every branch which starts with "pages-"
env:
global:
- NOKOGIRI_USE_SYSTEM_LIBRARIES=true # speeds up installation of html-proofer
Теперь разберем этот файл построчно:
language: ruby
Эта строка сообщает Travis о необходимости использовать сборочный контейнер Ruby. Она дает вашим скриптам доступ к Bundler, RubyGems и Ruby.
rvm:
- 2.1
RVM это популярная система управления версиями Ruby (также как rbenv, chruby и т.д.). Эта директива указывает Travis, какую версию Ruby использовать с вашими скриптами.
before_script:
- chmod +x ./script/cibuild
Сборочный скрипт должен быть исполняемым, чтобы Travis не выдал ошибку из-за нехватки полномочий. Вы также можете сделать это локально, добавив полномочия напрямую, тем самым сделав этот шаг ненужным.
script: ./script/cibuild
Travis позволяет запускать любой произвольный скрипт для тестирования вашего сайта. Единственное условие — все скрипты для вашего проекта должны быть помещены в каталог script
и вызвать тестовый скрипт cibuild
. Эта строка полностью изменяема, вы можете прямо в ней запустит сборку сайта.
install: gem install jekyll html-proofer
script: jekyll build && htmlproof ./_site
В директиве ` script ` может использоваться любая валидная команда командной строки.
# branch whitelist
branches:
only:
- gh-pages # test the gh-pages branch
- /pages-(.*)/ # test every branch which starts with "pages-"
Вы можете обеспечить запуск сборок Travis только для определенных веток вашего сайта. Для этого надо указать ветви в конфигурационном файле Travis. Указав ветвь gh-pages
вы гарантируете, что заданный скрипт (указанный выше) будет работать только с этими ветвями. Если вы обновляете сайт пулл-реквестами, вы можете задать сборку для ветвей, содержащих изменения с помощью регулярных выражений типа указанного /pages-(.*)/
.
Директива branches
полностью опциональна. Travis будет запускать сборку после каждой отправки любой из ветвей вашего репозитория.
env:
global:
- NOKOGIRI_USE_SYSTEM_LIBRARIES=true # speeds up
Используете html-proofer
? Вам понадобиться эта переменная окружения. Nokogiri используется для парсинга HTML на скомпилированном сайте и поставляется с библиотеками, которые при каждой установке необходимо компилировать. Вы можете уменьшить время установки Nokogiri задав переменной NOKOGIRI_USE_SYSTEM_LIBRARIES
значение true
.
Обязательно исключите vendor
из вашего _config.yml
Travis переносит все гемы из каталога vendor
на свои сборочные серверы, что может вызвать ошибки в Jekyll
exclude: [vendor]
По умолчанию сборка в Travis работает с командой sudo: false
. Эта команда запускает сборку в изолированном контейнере, это обычно ускоряет скорость сборки. Если у вас возникли проблемы со сборкой или она требует sudo
, задайте следующую опцию:
sudo: required
Проблемы
Ошибка Travis: “You are trying to install in deployment mode after changing your Gemfile. Run bundle install elsewhere and add the updated Gemfile.lock to version control.”
Решение: Запустите bundle install
и добавьте изменения в Gemfile.lock
или удалите Gemfile.lock
из репозитория, добавив его в .gitignore
.