Непрерывная интеграция (Continuous Integration) — практика разработки программного обеспечения, которая заключается в слиянии рабочих копий в общую основную ветвь разработки несколько раз в день и выполнении частых автоматизированных сборок проекта для скорейшего выявления и решения интеграционных проблем. В обычном проекте, где над разными частями системы разработчики трудятся независимо, стадия интеграции является заключительной. Она может непредсказуемо задержать окончание работ. Переход к непрерывной интеграции позволяет снизить трудоёмкость интеграции и сделать её более предсказуемой за счет наиболее раннего обнаружения и устранения ошибок и противоречий. Впервые названа и предложена Гради Бучем в 1991 г.

Непрерывная интеграция является одним из основных приёмов экстремального программирования.

Требования к проекту

Исходный код и всё, что необходимо для сборки и тестирования проекта, хранится в репозитории системы управления версиями;
Операции копирования из репозитория, сборки и тестирования всего проекта автоматизированы и легко вызываются из внешней программы.


Организация

На выделенном сервере организуется служба, в задачи которой входят:

получение исходного кода из репозитория;
сборка проекта;
выполнение тестов;
развёртывание готового проекта;
отправка отчетов.


Локальная сборка может осуществляться:

по внешнему запросу,
по расписанию,
по факту обновления репозитория и по другим критериям.


Сборка по расписанию

В случае сборки по расписанию (daily build), они, как правило, проводятся каждой ночью в автоматическом режиме — ночные сборки (чтобы к началу рабочего дня были готовы результаты тестирования). Для различия дополнительно вводится система нумерации сборок — обычно, каждая сборка нумеруется натуральным числом, которое увеличивается с каждой новой сборкой. Исходные тексты и другие исходные данные при взятии их из репозитория (хранилища) системы контроля версий помечаются номером сборки. Благодаря этому, точно такая же сборка может быть точно воспроизведена в будущем — достаточно взять исходные данные по нужной метке и запустить процесс снова. Это даёт возможность повторно выпускать даже очень старые версии программы с небольшими исправлениями.


Преимущества

проблемы интеграции выявляются и исправляются быстро, что оказывается дешевле;
немедленный прогон модульных тестов для свежих изменений;
постоянное наличие текущей стабильной версии вместе с продуктами сборок — для тестирования, демонстрации, и т. п.
немедленный эффект от неполного или неработающего кода приучает разработчиков к работе в итеративном режиме с более коротким циклом.


Недостатки

затраты на поддержку работы непрерывной интеграции;
потенциальная необходимость в выделенном сервере под нужды непрерывной интеграции;
немедленный эффект от неполного или неработающего кода отучает разработчиков от выполнения периодических резервных включений кода в репозиторий.

В случае использования системы управления версиями исходного кода с поддержкой ветвления, эта проблема может решаться созданием отдельной «ветки» (branch) проекта для внесения крупных изменений (код, разработка которого до работоспособного варианта займет несколько дней, но желательно более частое резервное копирование в репозиторий). По окончании разработки и индивидуального тестирования такой ветки, она может быть объединена (merge) с основным кодом или «стволом» (trunk) проекта.


Литература.

1) Booch Grady. Object Oriented Design: With Applications. — Benjamin Cummings, 1991. — P. 209. — ISBN 9780805300918.
2) Поль М. Дюваль, Стивен М. Матиас 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.


Comments and questions

Publish comment or question

Copyright 2019 © ELTASK.COM
All rights reserved.