- PVSM.RU - https://www.pvsm.ru -

Что такое travis-ci.org и с чем его едят?

image

Наверняка все слышали шумиху вокруг проекта travis-ci.org [1]. Я не являюсь исключением и учитывая, что один из его разработчиков, Джош Калдеримис (Josh Kalderimis) [2], выступивший на прошедшей конференции toster.ru [3], разжег мой интерес еще больше, то я решил окончательно разобраться, что такое travis-ci и с чем его едят. После прочтения вы узнаете как данный сервис может помочь ruby-разработчикам, а также как ему могут помочь они. Располагайтесь поудобнее, начнем...

Непрерывная интеграция

Как оказалось, термин «continuous integration» достаточно старый. Он был введен Мартином Фаулером (Martin Fowler) [4] в 2000-ом году и изложен в статье «Continuous Integration» [5] и по-русски звучит как «непрерывная интеграция». Это часть процесса разработки, в которой разрабатываемый проект собирается/тестируется в различных средах выполнения автоматически и непрерывно. Задумывалась данная методика для наиболее быстрого выявления ошибок/противоречий интеграции проекта, а соотвественно снижения расходов на последующие простои.

Принцип достаточно прост: на отдельной машине работает некая служба, в обязанности которой входит получение исходного кода проекта, его сборка, тестирование, логирование, а также возможность предоставить для анализа данные выполнения перечисленных операций.

Конечно же, бесплатный сыр бывает только в мышеловке и за удобство необходимо платить: выделить отдельный сервер и поддерживать его в рабочем состоянии, обеспечить наличие необходимых программных комплексов, настроить среды выполнения, делать резервные копии данных и т.д. Все это требует немало времени и ресурсов. И вполне логичным кажется возможность делегировать эту ответсвенность на сторонние сервисы. Вот как раз таким и является travis-ci — «хостинг непрерывной интеграции для open source сообщества». Пришло время посмотреть на него поближе.

Техническая сторона

Travis-ci поддерживает множество языков программирования среди которых есть и ruby (что неудивительно, т.к. изначально он разрабатывался для ruby-проектов). Начать пользоваться сервисом очень просто. Нужно всего лишь предпринять несколько шагов, которые подробно описаны в собственном гайде [6] проекта. Я лишь опишу процесс в целом.

Подключаемся

Travis-ci работает с сервисом github.com [7], поэтому первым делом необходимо выложить туда исходный код своего проекта. За исключением мелких технических настроек (вроде установки хуков в репозитории), весь процесс сводится к описанию различных опций в файле travis.yml. В нем нужно описать на каком языке работает проект, какие версии языка необходимо использовать (можно сразу все), среды окружения (здесь [8] приведен пример такого файла для ruby). Данный файл необходимо разместить в корне github-репозитория.

Если настройка прошла успешно, то travis-ci начинает непрерывно тестировать проект, отображая при этом текущий статус: красный цвет (возникли проблемы при тестировании), желтый (есть предупреждения) и зеленый (все тесты пройдены успешно). Помимо статуса можно увидеть: сообщение об ошибке или предупреждение, если что-то пошло не так; последний коммит и его автора; историю сборок и т.д. В целом интерфейс достаточно информативен и понятен. Помимо этого, travis-ci будет оповещать о проблемах по электронной почте.

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

  1. В момент, когда файл travis.yml попадает в корень github-репозитория, работа начинается только тогда, когда освободится любой один обработчик (worker) для языка проекта.
  2. Тестированию подвергаются все активные бранчи проекта, в которых присутствует файл travis.yml.
  3. Состояние программной среды между сборками не сохраняется. Это значит, что если в процессе тестирования была изменена база данных, созданы какие-либо файлы и т.д., то в последующих сборках эти результаты будут недоступны. Каждая новая сборка начинается с чистого листа.
  4. Чтобы не наделать ошибок в файле travis.yml существует утилита travis-lint [9]. Она может проверить:
    • Нет ли несоответствий формату 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» [10].
  2. Чтобы промотивировать общественность помочь проекту в финансовом плане, авторы создали сайт love.travis-ci.org [11], где можно пожертвовать некоторую сумму на поддержку и в зависимости от размера суммы, авторы в ответ презентуют различные сувениры: стикеры, кружки и прочее. Интересно также, что на этом же сайте описаны некоторые планы на будущее, в том числе и по монетизации.

Заключение

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

Ссылки

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

Автор: rezwyi


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/ruby/3909

Ссылки в тексте:

[1] travis-ci.org: http://travis-ci.org/

[2] Джош Калдеримис (Josh Kalderimis): http://twitter.com/joshkalderimis

[3] toster.ru: http://toster.ru/conferences/10-02-2012-ruby/results

[4] Мартином Фаулером (Martin Fowler): http://martinfowler.com

[5] «Continuous Integration»: http://martinfowler.com/articles/continuousintegration.html

[6] гайде: http://about.travis-ci.org/docs/user/getting-started/

[7] github.com: http://github.com

[8] здесь: http://about.travis-ci.org/docs/user/languages/ruby/

[9] travis-lint: http://github.com/travis-ci/travis-lint

[10] «Bob The Builder»: http://en.wikipedia.org/wiki/Bob_the_Builder

[11] love.travis-ci.org: https://love.travis-ci.org/

[12] Документация по сервису: http://about.travis-ci.org/

[13] Профиль на github.com: https://github.com/travis-ci/

[14] Твиттер Свена Фукса: http://twitter.com/svenfuchs