≪ На главную

Что такое 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 будет оповещать о проблемах по электронной почте.

Особенности работы сервиса

  1. В момент, когда файл .travis.yml попадает в корень github-репозитория, работа начинается только тогда, когда освободится любой один обработчик (worker) для языка проекта.
  2. Тестированию подвергаются все активные бранчи проекта, в которых присутствует файл .travis.yml.
  3. Состояние программной среды между сборками не сохраняется. Это значит, что если в процессе тестирования была изменена база данных, созданы какие-либо файлы и т.д., то в последующих сборках эти результаты будут недоступны. Каждая новая сборка начинается с чистого листа.
  4. Чтобы не наделать ошибок в файле .travis.yml существует утилита travis-lint. Она может проверить:
    • Нет ли несоответствий формату YAML
    • Ключ language указан
    • Поддерживает ли travis-ci указанные среды выполнения
    • В файле не используются устаревшие функции
  5. Для максимальной эффективности применяется т.н. матрица сборок. Это означает, что при указании нескольких сред выполнения, переменных окружения и т.д. в одном файле, будет автоматически выстраиваться цепочка всех возможных комбинаций, которые будут использоваться для сборок. Для рассмотренного ниже примера будут выполнены четыре сборки:
# travis.yml
rvm:
  - 1.9.3
  - rbx-18mode
env:
  - FOO=foo BAR=bar
  - FOO=bar BAR=foo

Интересные факты

  1. “Travis” в названии сервиса означает имя мультяшного персонажа - трактора Трэвиса, из детского телешоу “Bob The Builder”.
  2. Чтобы промотивировать общественность помочь проекту в финансовом плане, авторы создали сайт love.travis-ci.org, где можно пожертвовать некоторую сумму на поддержку и в зависимости от размера суммы, авторы в ответ презентуют различные сувениры: стикеры, кружки и прочее. Интересно также, что на этом же сайте описаны некоторые планы на будущее, в том числе и по монетизации.

Заключение

Travis-ci волей - не волей, вызывает к себе интерес. Учитывая еще тот факт, что в данный момент на нем хостятся довольно крупные и известные проекты, спрос на такие услуги есть. Сервис только набирает обороты и хочется пожелать ему обрести большое сообщество пользователей.

Ссылки

  1. Сайт сервиса
  2. Документация по сервису
  3. Профиль проекта на github.com
  4. Твиттер Джоша Калдеримиса
  5. Твиттер Свена Фукса
  6. Статья Мартина Фаулера “Continuous Integration”

(UPDATE #1)

Благодаря данной статье, я получил инвайт на Хабрахабр (вот она). Приношу свои благодарности человеку, который мне его дал (к сожалению, не знаю кто это).

Еще раз всем спасибо и удачи :)