Основные принципы подхода непрерывной интеграции.
Непрерывная интеграция (Continuous Integration) — это подход к разработке ПО, который заключается в выполнении частых автоматизированных сборок проекта для раннего выявления и решения интеграционных проблем. Использование непрерывной интеграции при разработке ПО позволяет снизить трудоёмкость интеграции и сделать её более предсказуемой за счет наиболее раннего обнаружения и устранения ошибок и противоречий.
Для того чтобы использовать непрерывную интеграцию, проект должен соответствовать следующим требованиям:
Все данные, необходимые для сборки (исходный код, библиотеки) и тестирования (спецификации) ПО, должны храниться в кодовой базе (репозитории);
Операции копирования операции копирования из репозитория, сборки и тестирования всего проекта автоматизированы и легко вызываются из внешней программы;
Для сложных проектов обычно выделяется отдельный сервер, на котором хранится база данных репозитория, а также работает служба непрерывной интеграции, которая выполняет следующие задачи:
получение исходного кода из репозитория;
сборка проекта;
выполнение тестов;
развёртывание готового проекта;
отправка отчетов;
Локальная сборка проекта может осуществляться по разным критериям, например:
по внешнему запросу;
по расписанию;
по факту обновления репозитория;
Для различения версий сборок дополнительно вводится система их нумерации - обычно, каждая сборка нумеруется натуральным числом, которое увеличивается с каждой новой сборкой. Исходные тексты и другие исходные данные при взятии их из репозитория системы контроля версий помечаются номером сборки. Благодаря этому, точно такая же сборка может быть точно воспроизведена в будущем — достаточно взять исходные данные по нужной метке и запустить процесс снова. Это даёт возможность повторно выпускать даже очень старые версии программы;
Достоинства использования непрерывной интеграции:
проблемы интеграции выявляются и исправляются быстро, что оказывается дешевле их исправления на более поздних стадиях жизненного цикла ПО;
немедленный прогон модульных тестов для свежих изменений;
постоянное наличие текущей стабильной версии вместе с продуктами сборок — для тестирования, демонстрации;
немедленный эффект от неполного или неработающего кода приучает разработчиков к работе в итеративном режиме с более коротким циклом;
Недостатки:
затраты на поддержку работы непрерывной интеграции;
потенциальная необходимость в выделенном сервере под нужды непрерывной интеграции;
немедленный эффект от неполного или неработающего кода отучает разработчиков от выполнения периодических резервных включений кода в репозиторий;
Инструменты, используемые в качестве службы непрерывной интеграции:
Hudson (Jenkins (Open Source)). Средство CI, написанное на Java. Запускается в контейнере сервлетов, таких как Apache Tomcat или GlassFish. Поддерживает инструментарий для работы с разными системами контроля версий, включая CVS, Subversion, Mercurial, Git и Clearcase, может собирать проекты Apache Ant и Apache Maven, а также исполнять shell-скрипты и команды Windows. Сборка проектов может быть назначена на разные события, например, производиться по расписанию, стартовать когда другая сборка уже собрана, либо при запросе определённого URL.
CruiseControl (Open Source). Средство CI, написанное на Java. Поддерживает сборку проектов Ant, NAnt, Maven, Phing, Rake и XCode.
