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

Continuous Integration вместе с buildbot: введение

Continuous Integration вместе с buildbot: введение
Любой проект за годы разработки обрастает большой и сложной инфраструктурой. Множество скриптов сборки, хуков и самописных утилиток со временем превращаются в целый ворох проблем. Этого сложно избежать полностью, но вполне реально сократить количество возможных неприятностей. Об одном инструменте, который может Вам в этом помочь, я сегодня и расскажу.

Buildbot? Не, не слышал.

На хабре почти нет упоминаний об этом замечательном тулките. Значит ли это, что им никто не пользуется? Отнюдь.
Сhromium, python, blender и множество других больших проектов [1] собираются и даже релизятся с помощью buildbot.
Continuous Integration вместе с buildbot: введение
Большой и страшный waterfall [2] проекта chromium

Что за зверь такой?

Стоит отметить главную особенность: buildbot — это фреймворк. Кто-то может посчитать это минусом, но для серьезных проектов это несомненный плюс. Ведь давно известно, что если хочешь сделать что-то годное, то лучше сделать это самому.
Конфиг, содержащий в себе инструкции что как и где собирать, представляет из себя код на python. Оттого я надеюсь, что Вы с этим языком знакомы.

В бой!

Лучше один раз увидеть, чем сто раз услышать, так что давайте сразу перейдем к действию.

Нам потребуется:

  • Python [3] в купе с его dev пакетами(для сборки twisted)
  • Virtualenv [4] для создания виртуального окружения
  • Git [5]

Создадим виртуальное окружение

mkdir -p buildbot
cd buildbot
virtualenv --no-site-packages sandbox
source sandbox/bin/activate
easy_install sqlalchemy==0.7.10
easy_install buildbot buildbot-slave

Создадим мастер-сервер

buildbot create-master master

Переименуем дефолтный конфиг

mv master/master.cfg.sample master/master.cfg

А теперь запустим мастер

buildbot start master

Можно проверить хорошо ли все работает посмотрев лог

tail -f master/twistd.log

А теперь, не отходя от кассы, создадим слейв
Размещение слейва рядом с мастером нельзя назвать хорошей практикой, но в нашем случае это позволительно

buildslave create-slave slave localhost:9989 example-slave pass

Запускаем

buildslave start slave

Слейв ругнется на развернутый по-соседству твистедовский сервер мастера. Не обращаем внимания.
Если есть особое желание, то можем проверить, как все прошло, заглянув в лог

tail -f slave/twistd.log

Если мы сделали все правильно, то на 8010 [6] порту нашего localhost'а будет красоваться вот такая приветственная страничка:
Continuous Integration вместе с buildbot: введение

Проверяем

Логинимся. user: pyflakes, password: pyflakes.
Идем на localhost:8010/builders/runtests [7] и видим примерно следующее:
Continuous Integration вместе с buildbot: введение
Смело жмякаем «Force Build»

Наш первый билд готов. Нажимаем F5 и переходим на страницу сборки. Все шаги зеленые? Значит, тесты прошли успешно.
Continuous Integration вместе с buildbot: введение
Нажав на stdout конкретного шага сборки, можно увидеть вывод консоли с подробным описанием того что, как и где запускалось.

Конец

Вот и все, на этом я закончу введение в buildbot. Если у хабрасообщества есть желание, то я с удовольствием продолжу повествование, расскажу о тонкостях и граблях на которые я наступил при внедрении билдбота.

Автор: HgeN

Источник [8]


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

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

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

[1] множество других больших проектов: http://trac.buildbot.net/wiki/SuccessStories

[2] waterfall: http://build.chromium.org/p/chromium/waterfall

[3] Python: http://python.org

[4] Virtualenv: http://pypi.python.org/pypi/virtualenv

[5] Git: http://git-scm.com

[6] 8010: http://localhost:8010

[7] localhost:8010/builders/runtests: http://localhost:8010/builders/runtests

[8] Источник: http://habrahabr.ru/post/204700/