Непрерывная интеграция — это практика разработки программного обеспечения, которая заключается в слиянии рабочих копий в общую основную ветвь разработки несколько раз в день и выполнении частых автоматизированных сборок проекта для скорейшего выявления потенциальных дефектов и решения интеграционных проблем. В обычном проекте, где над разными частями системы разработчики трудятся независимо, стадия интеграции является заключительной. Она может непредсказуемо задержать окончание работ. Переход к непрерывной интеграции позволяет снизить трудоёмкость интеграции и сделать её более предсказуемой за счет наиболее раннего обнаружения и устранения ошибок и противоречий, но основным преимуществом является сокращение стоимости исправления дефекта, за счёт раннего его выявления.
Требования к проекту
· Исходный код и всё, что необходимо для сборки и тестирования проекта, хранится в репозитории системы управления версиями;
· Операции копирования из репозитория, сборки и тестирования всего проекта автоматизированы и легко вызываются из внешней программы.
|
|
Организация
На выделенном сервере организуется служба, в задачи которой входят:
· получение исходного кода из репозитория;
· сборка проекта;
· выполнение тестов;
· развёртывание готового проекта;
· отправка отчетов.
Локальная сборка может осуществляться:
· по внешнему запросу,
· по расписанию,
· по факту обновления репозитория и по другим критериям.
Сборка по расписанию
В случае сборки по расписанию, они, как правило, проводятсякаждой ночью в автоматическом режиме — ночные сборки (чтобы к началу рабочего дня были готовырезультаты тестирования). Для различения дополнительно вводится система нумерации сборок — обычно, каждая сборка нумеруется натуральным числом, которое увеличивается с каждой новой сборкой. Исходныетексты и другие исходные данные при взятии их из репозитория системы контроля версий помечаютсяномером сборки. Благодаря этому, точно такая же сборка может быть точно воспроизведена в будущем — достаточно взять исходные данные по нужной метке и запустить процесс снова. Это даёт возможностьповторно выпускать даже очень старые версии программы с небольшими исправлениями.
Преимущества
· проблемы интеграции выявляются и исправляются быстро, что оказывается дешевле;
· немедленный прогон модульных тестов для свежих изменений;
· постоянное наличие текущей стабильной версии вместе с продуктами сборок — для тестирования, демонстрации, и т. п.
· немедленный эффект от неполного или неработающего кода приучает разработчиков к работе в итеративномрежиме с более коротким циклом.
|
|
Недостатки
· затраты на поддержку работы непрерывной интеграции;
· потенциальная необходимость в выделенном сервере под нужды непрерывной интеграции;
· немедленный эффект от неполного или неработающего кода отучает разработчиков от выполненияпериодических резервных включений кода в репозиторий.
· в случае использования системы управления версиями исходного кода с поддержкой ветвления, эта проблемаможет решаться созданием отдельной «ветки» (англ. branch) проекта для внесения крупных изменений (код, разработка которого до работоспособного варианта займет несколько дней, но желательно более частоерезервное копирование в репозиторий). По окончании разработки и индивидуального тестирования такойветки, она может быть объединена (англ. merge) с основным кодом или «стволом» (англ. trunk) проекта.