Введение
Непрерывная интеграция (Continuous Integration, CI) – практика разработки программного обеспечения, при которой члены команды регулярно (несколько раз в день) интегрируют свои изменения в общую кодовую базу, а каждая интеграция автоматически верифицируется посредством сборки и запуска автоматических тестов. Цель – выявлять конфликты интеграции и дефекты максимально рано, пока их исправление обходится дёшево.
Мартин Фаулер (Martin Fowler), один из популяризаторов CI, описывает его как «практику, при которой каждый член команды интегрирует свою работу с основной ветвью ежедневно. Каждая интеграция верифицируется автоматической сборкой, включающей тесты, для скорейшего выявления ошибок интеграции».
История и контекст
Концепция CI была сформулирована в рамках методологии Extreme Programming (XP), разработанной Кентом Беком (Kent Beck) в конце 1990-х годов. Грэди Буч (Grady Booch) упоминал идею ежедневных сборок ещё в 1991 году. Первая CI-система CruiseControl была выпущена командой ThoughtWorks в 2001 году с открытым исходным кодом.
Jenkins (форк Hudson, 2011) стал самой популярной CI-системой с открытым кодом, набрав миллионы инсталляций. Travis CI (2011) принёс CI как сервис для GitHub-репозиториев. Появление GitLab CI/CD (2015) и GitHub Actions (2019) интегрировало CI непосредственно в платформы управления кодом. Согласно State of DevOps Report, команды с развитыми CI-практиками деплоят код в 208 раз чаще и восстанавливаются от инцидентов в 2604 раза быстрее.
Как это работает
Типичный CI-пайплайн включает следующие шаги:
- Коммит и push: Разработчик отправляет изменения в систему контроля версий (Git).
- Тригер CI: Webhook уведомляет CI-сервер (Jenkins, GitLab CI, GitHub Actions) о новом коммите.
- Получение кода: CI-агент клонирует репозиторий в чистую среду.
- Сборка (Build): Код компилируется или транспилируется; проверяются зависимости.
- Статический анализ (Linting/SAST): Инструменты SonarQube, ESLint, Checkmarx проверяют код на качество и уязвимости без запуска.
- Автоматические тесты: Запускаются юнит-тесты, интеграционные тесты; формируется отчёт о покрытии.
- Публикация артефактов: Успешно собранные пакеты публикуются в artifact registry (Nexus, JFrog Artifactory).
- Уведомление команды: При успехе или ошибке сборки разработчик и команда получают уведомление.
Где применяется
CI является стандартной практикой в современной разработке ПО:
- Веб-разработка: Фронтенд и бэкенд приложения с частыми релизами; CI обеспечивает качество при высокой частоте изменений.
- Мобильные приложения: Bitrise, Fastlane автоматизируют сборку iOS/Android при каждом коммите с запуском UI-тестов.
- Микросервисные архитектуры: Каждый микросервис имеет собственный CI-пайплайн; CI обнаруживает несовместимости API между сервисами.
- Data Engineering: CI-пайплайны для ETL-кода, дата-трансформаций и ML-моделей.
- Встроенное ПО и IoT: Кросс-компиляция и тестирование firmware для устройств с ограниченными ресурсами.
Связь с другими понятиями
CI является первой частью пайплайна CI/CD (Continuous Integration/Continuous Delivery): после прохождения CI-шагов код автоматически доставляется или деплоится в тестовые и продуктовые среды. DevOps как культура и практика строится на CI как технической основе быстрой обратной связи.
Системы контроля версий (Git, CVS, Subversion) являются обязательным предусловием CI. Непрерывная доставка (CD) расширяет CI до автоматической доставки в production. Непрерывная интеграция также тесно связана с практиками Test-Driven Development (TDD) и Infrastructure as Code (IaC), обеспечивающими автоматизируемость и воспроизводимость сборочных процессов.