Непрерывная интеграция
Непрерывная интеграция (англ. Continuous Integration) — это практика разработки программного обеспечения, которая заключается в выполнении частых автоматизированных сборок проекта для скорейшего выявления и решения проблем интеграции.
В обычном проекте, где над разными частями системы разработчики трудятся независимо, стадия интеграции является заключительной. Она может непредсказуемо задержать окончание работ. Переход к непрерывной интеграции позволяет снизить трудоёмкость интеграции и сделать её более предсказуемой за счет наиболее раннего обнаружения и устранения ошибок и противоречий.
Непрерывная интеграция является одним из основных приёмов экстремального программирования.(англ. Extreme Programming, XP).
Содержание
Требования к проекту
- исходные коды и все, что необходимо для сборки и тестирования проекта, хранится в репозитории системы управления версиями
- операции копирования из репозитория, сборки и тестирования всего проекта автоматизированы и легко вызываются из внешней программы
Организация
На выделенном сервере организуется служба, в задачи которой входят:
- получение исходного кода из репозитория
- сборка проекта
- выполнение тестов
- развёртывание готового проекта
- отправка отчетов
Локальная сборка может осуществляться:
- по внешнему запросу
- по расписанию
- по факту обновления репозитория и по другим критериям
Сборка по расписанию
Сборки по расписанию как правило, проводятся каждой ночью в автоматическом режиме. Это так называемые ночные сборки (англ. nightly build), чтобы к началу рабочего дня были готовы результаты тестирования). Для различения дополнительно вводится система нумерации сборок — обычно, каждая сборка нумеруется целым числом, которое увеличивается с каждой новой сборкой. Исходные тексты и другие файлы помечаются номером сборки в репозитории системы контроля версий. Благодаря этому, точно такая же версия сборки может быть воспроизведена в будущем — достаточно взять исходный код по нужной метке и запустить процесс снова. Это дает возможность повторно выпускать даже очень старые версии программы с небольшими исправлениями.
Преимущества
- проблемы интеграции выявляются и исправляются быстро, что оказывается дешевле;
- немедленный прогон модульных тестов для свежих изменений;
- постоянное наличие текущей стабильной версии вместе с продуктами сборок — для тестирования, демонстрации, и т. п.
- немедленный эффект от неполного или неработающего кода приучает разработчиков к работе в итеративном режиме с более коротким циклом.
Средства непрерывной интеграции
- Bamboo (англ.)
- Hudson и Jenkins
- CruiseControl
- TeamCity
- BuildBot