Автоматизація процесу розробки: системи неперервної інтеграції

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

У колективі, кожен член якого працює над окремою незалежною частиною, стадія інтеграції є заключною. Саме в ній виявляються проблеми сумісності всіх компонентів системи, через це кінцева дата випуску може бути відсунута на невизначений термін. Саме на зменшення часових та трудових витрат на процес інтеграції за рахунок раннього виявлення проблем та усунення помилок та протиріч спрямовані системи неперервної інтеграції.

Серед таких систем найбільш популярними рішеннями з відкритим кодом є CruiseControl та Buildbot. Перший має значно розвиненішу структуру, в той час як другий є легким та простим у налаштуванні. Для початку ж проведемо невеличкий огляд можливостей, переваг та недоліків. Порівняння буде дещо незвичним: воно вестиметься в режимі “перехресного вогню”: кожна зі сторін аргументує власні переваги над конкурентом. Це є найкращий варіант для порівняння досить різних за будовою і реалізацією систем, оскільки в більшості випадків характеристики систем між собою не перетинаються.Після такого собі бліц-опитування ми підведемо підсумки у вигляді списку, для більшої наочності.

На лінії вогню

CruiseControl logo

Остання версія 2.7.3 / 16 Липня 2008
Мова Java
Сайт http://cruisecontrol.sourceforge.net/
Ліцензія Модифікована ліцензія BSD

BuildBot logo

Остання версія 0.7.8 / 24 Липня 2008
Мова Python
Сайт http://buildbot.net/
Ліцензія GPL

Вже виходячи з мови, на якій написаний CruiseControl, ясно, що система в основному “заточена” для використання в проектах на Java. Це підтверджується і готовими обгортками для таких систем збирання ПЗ, як Ant, Maven, NAnt тощо. Тим не менше, існує можливість роботи з іншими системами через узагальнену обгортку exec. Buildbot же в свою чергу має кілька специфічних для пітонівських проектів можливостей, як наприклад, збирання яйця (Python eggs), генерація документації EPYDoc, проведення базового аналізу коду за допомогою PyFlakes. Окремим пунктом можна зазначити можливість проведення модульних тестів Perl. Зважаючи на переважне використання систем збирання, базованих на make-файлах, а також активне розповсюдження SCons(повноцінна система збирання ПЗ на Python), BuildBot містить готові обгортки для більшості таких систем. Як і у випадку з CruiseControl, можливо запустити на виконання будь-що за допомогою обгортки ShellCommand.

BuildBot побудований на архітектурі клієнт-сервер, що дозволяє проводити тестування на різних машинах з однією центральною інформаційною системою, а також розміщувати машини, на яких проводиться збирання, за NAT.

CruiseControl має розвинену систему сповіщення та чудовий графічний web-інтерфейс. BuildBot же, хоч і має не менш розвинені можливості для сповіщення, значно програє в інтерфейсі.

Інформаційна система CruiseControl побудована на JSP, що дозволяє інтегрувати її в будь-який Java Application Server, як Tomcat або ж інший більш легкий. Звичайно, за гнучкість треба платити, і ціною за використання Java і JSP є значне спочивання ресурсів і в багатьох великих проектах призводить до виділення окремого сервера під потреби CriuseControl. Легкий, простий, та досить примітивний web-інтерфейс у BuildBot дозволяє йому значно знизити навантаження на сервер. Використання Twisted в якості базової бібліотеки ж вимагає виділення окремого порту на всіх мережевих інтерфейсах системи, що є небажаним. Інтеграцію з Apache можливо виконати, використовуючи http_proxy модуль Apache та кілька правил файрвола для закриття портів системи назовні.

В наступній статті циклу я детально опишу реальний приклад використання систем неперервної інтеграції на прикладі BuildBot.