Непрерывная интеграция или CI (Continuous Integration) – это разработка программного обеспечения, которая базируется на постоянном слиянии рабочих копий в общую, единую ветку. Этот процесс может осуществляться несколько раз в день. Помогает автоматизировать сборку проектов для более быстрого тестирования, обнаружения ошибок и решения интеграционных проблем.

Обычный процесс разработки, при котором каждый программист трудится отдельно, интеграция является последней стадией. В ней может содержаться окончание работ. При переходе к непрерывной интеграции удается соответствующий процесс сделать более простым, а также предсказуемым. Результат достигается за счет того, что при CI сборка будущего приложения раньше проверяется на ошибки и противоречия. Соответствующая особенность приводит к снижению стоимости исправления дефектов.

Далее предстоит рассмотреть CI-системы более подробно. Представленная информация больше ориентирована на разработчиков, однако будет полезна и тестировщикам ПО. 

Несколько слов про CI

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

  • сборку;
  • тестирование;
  • развертку будущего проекта.

Все это происходит без дополнительного вмешательства человека – автоматически. Часто при программировании контента можно встретить CI/CD или CICD. В этом случае подразумевается комбинация непрерывной интеграции и непрерывной развертки. CI-CD используется для объединения разработки, развертки и команды. За счет этого создание итогового проекта значительно ускоряется.

Виды тестирования

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

  1. Ручное. Сборка и проверка продукта будет полностью выполняться программистом от самого начала до конца. Это самый дорогостоящий вариант. Он может отнимать немало времени, а также не исключает человеческий фактор.
  2. Полуавтоматическое. Разработчик будет производить сборку и проверку будущего исходного приложения самостоятельно, но с использованием специальных программ. Процессы настраиваются один раз, а затем просто активируются за счет ввода команд. Такой подход является полуавтоматической сборкой, ведь настройка и применение командных операций организовываются человеком. Сборка тут – это часть работы. Для того, чтобы получить готовое приложение, его предстоит запустить, чем занимается сервер программы. Его активация осуществляется за счет размещения кода в директории, настройки и запуска сервисных служб.
  3. Автоматическое – это и есть интеграционные системы (integration system). Исходный код автоматически превращается в готовое к установке программное обеспечение. Такой подход называется CI. В соответствующей ситуации изменения из репозитория будут получены без непосредственного участия человека. Настраивается несколькими способами: CI запросит репозиторий в N часов/минут с проверкой на наличие обновлений или репозиторий самостоятельно свяжется с Integration System при наличии новых версий.

В последней ситуации после получения информации об изменениях, автоматом запустится сборка и тесты. Если они пройдут неудачно, программист получит характерное сообщение. В противном случае CI развернет программное обеспечение. Производится операция на подготовленной заранее тестовой машине.

Организация

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

На выделенном сервере при рассматриваемой концепции (CI) запускается специальная служба. Она отвечает за:

  • получение исходного кода;
  • непосредственную сборку;
  • организацию тестов;
  • развертку готового программного продукта;
  • отправку отчетов по мере необходимости.

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

Поддерживается формирование контента по расписанию (daily build или «ежедневная сборка»). Обычно оно осуществляется в нерабочее время, по ночам. Планируется так, чтобы к началу нового дня программистам были переданы результаты организованных тестов.

Для различия дополнительно внедряется система нумерации билдов. Каждый их них получает в качестве «порядкового номера» натуральное число. С каждой новой «версией» оно будет увеличиться на единицу. Соответствующим элементом будут получаться иные исходные данные при взятия их из хранилища (репозитория) контроля версий. Такой подход позволяет воспроизводить одинаковые билды в будущем: останется выгрузить исходную информацию по той или иной метки и запустить процессы вновь.

Плюсы и минусы

Рассматриваемая операция имеет как преимущества, так и недостатки. Зная о них, разработчики смогут понять, стоит ли им вообще заниматься автоматизацией тестов.

Сильные стороны

Преимуществами CI считаются такие моменты как:

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

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

Слабые стороны

Недостатки у автоматизации тоже есть. К ним относят значительные расходы на поддержку функционирования непрерывного интегрирования. Сюда же включены дополнительные ресурсные и вычислительные затраты на реализацию процессов.

Рассматриваемая операция также требует от программистов наличия определенного опыта в тестах. Без него ни CI, ни CI/CD организовать не получится.

Здесь предлагается наглядно рассмотреть изучаемую тему. А лучше вникнуть в нее и обучить основам организации помогут специализированные компьютерные курсы по DevOps.