Непрерывная интеграция
| Процесс разработки ПО | |
| Шаги процесса | |
|---|---|
|
Анализ • Проектирование • Реализация • Тестирование • Внедрение • Сопровождение |
|
| Модели / Методы | |
|
Agile (XP, Lean, Scrum и др.) • Cleanroom • Итеративная (OpenUP) • RAD • RUP • MSF • Спиральная • Каскадная • V-Model • Dual Vee Model • DSDM |
|
| Сопутствующие дисциплины | |
|
Конфигурационное управление • Документирование • Управление проектами • Управление требованиями |
|
Непрерывная интеграция (англ. Continuous Integration) — это практика разработки программного обеспечения, которая заключается в выполнении частых автоматизированных сборок проекта для скорейшего выявления и решения интеграционных проблем. В обычном проекте, где над разными частями системы разработчики трудятся независимо, стадия интеграции является заключительной. Она может непредсказуемо задержать окончание работ. Переход к непрерывной интеграции позволяет снизить трудоёмкость интеграции и сделать её более предсказуемой за счет наиболее раннего обнаружения и устранения ошибок и противоречий.
Содержание |
[править] Требования к проекту
- Исходные коды и все, что необходимо для сборки и тестирования проекта, хранится в репозитории системы управления версиями;
- операции копирования из репозитория, сборки и тестирования всего проекта автоматизированы и легко вызываются из внешней программы.
[править] Организация
На выделенном сервере организуется служба, в задачи которой входят:
- получение исходного кода из репозитория;
- сборка проекта;
- выполнение тестов;
- развёртывание готового проекта;
- отправка отчетов.
Локальная сборка может осуществляться:
- по внешнему запросу,
- по расписанию,
- по факту обновления репозитория и по другим критериям.
[править] Сборка по расписанию
В случае сборки по расписанию (англ. daily build — рус. ежедневная сборка), они, как правило, проводятся каждой ночью в автоматическом режиме — ночные сборки (чтобы к началу рабочего дня были готовы результаты тестирования). Для различения дополнительно вводится система нумерации сборок — обычно, каждая сборка нумеруется натуральным числом, которое увеличивается с каждой новой сборкой. Исходные тексты и другие исходные данные при взятии их из репозитория системы контроля версий помечаются номером сборки. Благодаря этому, точно такая же сборка может быть точно воспроизведена в будущем — достаточно взять исходные данные по нужной метке и запустить процесс снова. Это даёт возможность повторно выпускать даже очень старые версии программы с небольшими исправлениями.
[править] Преимущества
- проблемы интеграции выявляются и исправляются быстро, что оказывается дешевле;
- немедленный прогон модульных тестов для свежих изменений;
- постоянное наличие текущей стабильной версии вместе с продуктами сборок — для тестирования, демонстрации, и т. п.
- немедленный эффект от неполного или неработающего кода приучает разработчиков к работе в итеративном режиме с более коротким циклом.
[править] Недостатки
- затраты на поддержку работы непрерывной интеграции;
- потенциальная необходимость в выделенном сервере под нужды непрерывной интеграции;
- немедленный эффект от неполного или неработающего кода отучает разработчиков от выполнения периодических резервных включений кода в репозиторий.
- в случае использования системы управления версиями исходного кода с поддержкой ветвления, эта проблема может решаться созданием отдельной "ветки" (англ. branch) проекта для внесения крупных изменений (код, разработка которого до работоспособного варианта займет несколько дней, но желательно более частое резервное копирование в репозиторий). По окончании разработки и индивидуального тестирования такой ветки, она может быть объединена (англ. merge) с основным кодом или "стволом" (англ. trunk) проекта.
[править] Литература
- Поль М. Дюваль, Стивен М. Матиас III, Эндрю Гловер Непрерывная интеграция: улучшение качества программного обеспечения и снижение риска = Continuous Integration: Improving Software Quality and Reducing Risk (The Addison-Wesley Signature Series) — Вильямс, 2008. — 2000 экз. — ISBN 978-5-8459-1408-8, 0-321-33638-0.
[править] См. также
- Экстремальное программирование
- Bamboo (англ.)
- Hudson и Jenkins
- CruiseControl (англ.)
- TeamCity (англ.)