Русская Википедия:Непрерывная интеграция

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Шаблон:Разработка программного обеспечения Непрерывная интеграция (CI, Шаблон:Lang-en) — практика разработки программного обеспечения, которая заключается в постоянном слиянии рабочих копий в общую основную ветвь разработки (до нескольких раз в день) и выполнении частых автоматизированных сборок проекта для скорейшего выявления потенциальных дефектов и решения интеграционных проблем. В обычном проекте, где над разными частями системы разработчики трудятся независимо, стадия интеграции является заключительной. Она может непредсказуемо задержать окончание работ. Переход к непрерывной интеграции позволяет снизить трудоёмкость интеграции и сделать её более предсказуемой за счёт наиболее раннего обнаружения и устранения ошибок и противоречий, но основным преимуществом является сокращение стоимости исправления дефекта, за счёт раннего его выявления.

Впервые концептуализирована и предложена Гради Бучем в 1991 году[1]. Является одним из основных элементов практики экстремального программирования.

Организация

Для применения практики необходимо выполнение ряда базовых требований к проекту разработки. В частности, исходный код и всё, что необходимо для сборки и тестирования проекта, должно храниться в репозитории системы управления версиями, а операции копирования из репозитория, сборки и тестирования всего проекта должны быть автоматизированы и легко вызываться из внешних программ.

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

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

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

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

Преимущества и недостатки

К преимуществам непрерывной интеграции относятся следующие моменты:

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

При этом, практика не лишена недостатков, в частности:

  • значительные затраты на поддержку работы непрерывной интеграции;
  • необходимость в дополнительных вычислительных ресурсах под нужды непрерывной интеграции;

Кроме того, немедленный эффект от неполного или неработающего кода отучает разработчиков от выполнения периодических резервных включений кода в репозиторий, но в случае использования системы управления версиями исходного кода с поддержкой ветвления, эта проблема может решаться созданием отдельной «ветки» (Шаблон:Lang-en) проекта для внесения крупных изменений (код, разработка которого до работоспособного варианта займет несколько дней, но желательно более частое сохранение результата в репозиторий). По окончании разработки и индивидуального тестирования такой ветки, она может быть объединена (Шаблон:Lang-en2) с основным кодом или «стволом» (Шаблон:Lang-en2) проекта.

Примечания

Шаблон:Примечания

Литература

Ссылки

Шаблон:Rq