Что такое travis-ci.org и с чем его едят? 17/3/2012
Наверняка все слышали шумиху вокруг проекта travis-ci.org. Я не являюсь исключением и учитывая, что один из его разработчиков, Джош Калдеримис (Josh Kalderimis), выступивший на прошедшей конференции toster.ru, разжег мой интерес еще больше, то я решил окончательно разобраться, что такое travis-ci и с чем его едят. После прочтения вы узнаете как данный сервис может помочь ruby-разработчикам, а также как ему могут помочь они. Располагайтесь поудобнее, начнем…
Непрерывная интеграция
Как оказалось, термин “continuous integration” достаточно старый. Он был введен Мартином Фаулером (Martin Fowler) в 2000-ом году и изложен в статье “Continuous Integration” и по-русски звучит как “непрерывная интеграция”. Это часть процесса разработки, в которой разрабатываемый проект собирается/тестируется в различных средах выполнения автоматически и непрерывно. Задумывалась данная методика для наиболее быстрого выявления ошибок/противоречий интеграции проекта, а соотвественно снижения расходов на последующие простои.
Принцип достаточно прост: на отдельной машине работает некая служба, в обязанности которой входит получение исходного кода проекта, его сборка, тестирование, логирование, а также возможность предоставить для анализа данные выполнения перечисленных операций.
Конечно же, бесплатный сыр бывает только в мышеловке и за удобство необходимо платить: выделить отдельный сервер и поддерживать его в рабочем состоянии, обеспечить наличие необходимых программных комплексов, настроить среды выполнения, делать резервные копии данных и т.д. Все это требует немало времени и ресурсов. И вполне логичным кажется возможность делегировать эту ответсвенность на сторонние сервисы. Вот как раз таким и является travis-ci - “хостинг непрерывной интеграции для open source сообщества”. Пришло время посмотреть на него поближе.
Техническая сторона
Travis-ci поддерживает множество языков программирования среди которых есть и Ruby (что неудивительно, т.к. изначально он разрабатывался для ruby-проектов). Начать пользоваться сервисом очень просто. Нужно всего лишь предпринять несколько шагов, которые подробно описаны в собственном гайде проекта. Я лишь опишу процесс в целом.
Подключаемся
Travis-ci работает с сервисом github.com, поэтому первым делом необходимо выложить туда исходный код своего проекта. За исключением мелких технических настроек (вроде установки хуков в репозитории), весь процесс сводится к описанию различных опций в файле .travis.yml. В нем нужно описать на каком языке работает проект, какие версии языка необходимо использовать (можно сразу все), среды окружения (здесь приведен пример такого файла для Ruby). Данный файл необходимо разместить в корне github-репозитория.
Если настройка прошла успешно, то travis-ci начинает непрерывно тестировать проект, отображая при этом текущий статус: красный цвет (возникли проблемы при тестировании), желтый (есть предупреждения) и зеленый (все тесты пройдены успешно). Помимо статуса можно увидеть: сообщение об ошибке или предупреждение, если что-то пошло не так; последний коммит и его автора; историю сборок и т.д. В целом интерфейс достаточно информативен и понятен. Помимо этого, travis-ci будет оповещать о проблемах по электронной почте.
Особенности работы сервиса
- В момент, когда файл
.travis.yml
попадает в корень github-репозитория, работа начинается только тогда, когда освободится любой один обработчик (worker) для языка проекта. - Тестированию подвергаются все активные бранчи проекта, в которых присутствует файл
.travis.yml
. - Состояние программной среды между сборками не сохраняется. Это значит, что если в процессе тестирования была изменена база данных, созданы какие-либо файлы и т.д., то в последующих сборках эти результаты будут недоступны. Каждая новая сборка начинается с чистого листа.
- Чтобы не наделать ошибок в файле
.travis.yml
существует утилита travis-lint. Она может проверить:- Нет ли несоответствий формату YAML
- Ключ
language
указан - Поддерживает ли travis-ci указанные среды выполнения
- В файле не используются устаревшие функции
- Для максимальной эффективности применяется т.н. матрица сборок. Это означает, что при указании нескольких сред выполнения, переменных окружения и т.д. в одном файле, будет автоматически выстраиваться цепочка всех возможных комбинаций, которые будут использоваться для сборок. Для рассмотренного ниже примера будут выполнены четыре сборки:
Интересные факты
- “Travis” в названии сервиса означает имя мультяшного персонажа - трактора Трэвиса, из детского телешоу “Bob The Builder”.
- Чтобы промотивировать общественность помочь проекту в финансовом плане, авторы создали сайт love.travis-ci.org, где можно пожертвовать некоторую сумму на поддержку и в зависимости от размера суммы, авторы в ответ презентуют различные сувениры: стикеры, кружки и прочее. Интересно также, что на этом же сайте описаны некоторые планы на будущее, в том числе и по монетизации.
Заключение
Travis-ci волей - не волей, вызывает к себе интерес. Учитывая еще тот факт, что в данный момент на нем хостятся довольно крупные и известные проекты, спрос на такие услуги есть. Сервис только набирает обороты и хочется пожелать ему обрести большое сообщество пользователей.
Ссылки
- Сайт сервиса
- Документация по сервису
- Профиль проекта на github.com
- Твиттер Джоша Калдеримиса
- Твиттер Свена Фукса
- Статья Мартина Фаулера “Continuous Integration”
(UPDATE #1)
Благодаря данной статье, я получил инвайт на Хабрахабр (вот она). Приношу свои благодарности человеку, который мне его дал (к сожалению, не знаю кто это).
Еще раз всем спасибо и удачи :)