Что такое CI/CD? Непрерывная интеграция и непрерывная доставка
⚡ Умное резюме
Непрерывная интеграция — это практика разработки программного обеспечения, при которой члены команды как минимум ежедневно объединяют результаты своей работы в общем репозитории, а каждый коммит запускает автоматическую сборку и тестирование для раннего выявления ошибок интеграции.

Что такое непрерывная интеграция (CI)?
Непрерывная интеграция Это метод разработки программного обеспечения, при котором члены команды интегрируют свою работу как минимум раз в день. Каждая интеграция проверяется автоматизированной сборкой, которая выявляет ошибки. Эта концепция была введена более двух десятилетий назад, чтобы избежать «интеграционного ада», который возникает, когда интеграция откладывается до конца проекта.
После внесения изменений в код, программное обеспечение немедленно компилируется и тестируется. В крупном проекте с большим количеством разработчиков изменения кода происходят много раз в день. С каждым изменением кода выполняется компиляция и тестирование; если тест пройден успешно, проверяется готовность сборки к развертыванию; и если развертывание прошло успешно, код отправляется в продакшн. Этот цикл «изменение кода, компиляция, тестирование и развертывание» является непрерывным, что и дало этой практике её название.
Что такое непрерывная доставка (CD)?
Непрерывная поставка Это метод разработки программного обеспечения, при котором команда разрабатывает программное обеспечение в коротких циклах и обеспечивает его надежный выпуск в любое время. Цель состоит в том, чтобы создавать, тестировать и выпускать программное обеспечение с высокой скоростью и частотой, снижая затраты, время и риски, связанные с внесением изменений посредством частых обновлений в рабочую среду.
Разница между CI и CD
Непрерывная интеграция Непрерывная доставка (Continuous Delivery) — это подход, при котором каждое изменение в кодовой базе тестируется автоматически, тогда как непрерывная доставка позволяет безопасно и быстро внедрять в рабочую среду такие изменения, как новые функции, конфигурации и исправления ошибок.
Развитие без кохлеарной имплантации против развития с кохлеарной имплантацией
| Разработка без CI | Разработка с CI |
|---|---|
| Много ошибок | Меньше ошибок |
| Редкие коммиты | Регулярные коммиты |
| Редкие и медленные релизы | Регулярные рабочие релизы |
| Сложная интеграция | Простая и эффективная интеграция |
| Тестирование происходит поздно | Тестирование проводится на ранних этапах и регулярно. |
| Проблемы сложнее решить. | Проблемы выявляются и устраняются быстрее. |
| Плохая видимость проекта | Лучшая видимость проекта |
Разница между компиляцией и непрерывной интеграцией
В то время как компиляция лишь преобразует код в машинный язык, CI выполняет ряд более масштабных задач:
- Интеграция с базой данных: Обеспечивает синхронизацию базы данных и кода, а также автоматизирует создание базы данных и тестовых данных.
- Code осмотр: Обеспечивает работоспособность кодовой базы, выявляет проблемы на ранних стадиях и применяет передовые методы работы.
- Автоматическое развертывание: Позволяет выпускать продукт в любое время и поддерживает его в постоянно доступном для демонстрации состоянии.
- Генерация документа: Обеспечивает актуальность документации, составляет отчеты о сборке и собирает метрики.
- Компиляция: Преобразует высокоуровневый код в машинный язык и обеспечивает его компиляцию на каждой целевой платформе.
В идеале сборка должна выполняться из командной строки, а не зависеть от IDE, происходить непрерывно на выделенном сервере CI (а не по расписанию cron), запускаться при каждом изменении кода и предоставлять немедленную обратную связь без каких-либо усилий со стороны разработчика.
Что необходимо для проведения процесса непрерывной интеграции?
- Система контроля версий (VCS): Надежный метод централизации и сохранения изменений, внесенных в ваш проект с течением времени.
- Виртуальная машина: Запасной сервер или хотя бы один виртуальная машина для построения вашей системы.
- Размещенные решения для инструментов непрерывной интеграции: Чтобы избежать необходимости управлять серверами, хостинговые решения поддерживают весь процесс и обеспечивают более простую масштабируемость.
- Инструменты: Если вы выберете вариант с самостоятельным размещением, установите инструмент непрерывной интеграции, например, такой: Jenkins, TeamCity, Bambooили GitLab.
Как работает непрерывная интеграция?
Старый пример — компания Nokia, которая когда-то использовала процедуру, называемую ночной сборкой. После многочисленных коммитов от многих разработчиков в течение дня программное обеспечение собиралось каждую ночь. Поскольку сборка производилась только раз в день, выявление, идентификация и исправление ошибок в большом коде было сложной задачей.
Later Команда внедрила непрерывную интеграцию. Программное обеспечение разрабатывалось и тестировалось сразу после того, как разработчик вносил изменения в код, поэтому любая ошибка обнаруживалась немедленно, и ответственный разработчик мог быстро исправить дефект.
Особенности КИ
- Позволяет поддерживать единый репозиторий исходного кода.
- Позволяет протестировать клон производственной среды, расположенный как можно ближе к рабочей среде.
- Обеспечивает постоянную доступность актуальной сборки.
- Обеспечивает прозрачность всего процесса сборки, тестирования и развертывания для всех заинтересованных сторон.
Зачем использовать CI?
- Помогает создавать более качественное программное обеспечение и проводить повторяемое тестирование.
- Это позволяет масштабировать производительность инженерных команд и даёт разработчикам возможность работать над функциями параллельно.
- Повышает прозрачность и улучшает коммуникацию внутри команды.
- Обеспечивает мгновенную обратную связь при возникновении проблемы и снижает риски, делая развертывание более быстрым и предсказуемым.
- Позволяет избежать путаницы в последний момент во время выпуска продукта.
лучшие практики использования CI-систем
- Вносите изменения как можно раньше и чаще, и никогда не публикуйте неработающий код.
- Незамедлительно устраняйте ошибки сборки и реагируйте на показатели.
- Выполняйте сборку во всех целевых средах и создавайте артефакты из каждой сборки.
- Автоматизируйте сборку, чтобы она не зависела от IDE.
- При каждом изменении, включая схему базы данных, необходимо создавать и тестировать все компоненты.
- Обеспечьте быструю сборку и используйте автоматизированное развертывание.
Недостатки CI
- Для освоения работы с CI-сервером требуется время на первоначальную настройку и обучение.
- Необходимо разработать соответствующие процедуры тестирования, а для создания хорошо продуманного набора тестов требуются значительные ресурсы.
- Необходимо перевести привычные процессы на новый уровень, а также требуются дополнительные серверы и среды.
- Задержки могут возникать, когда несколько разработчиков хотят одновременно интегрировать свой код.
Инструменты для процесса непрерывной интеграции
Jenkins
Jenkins — это инструмент непрерывной интеграции с открытым исходным кодом, написанный на JavaЭто облегчает тестирование в реальном времени и составление отчетов об отдельных изменениях в более крупной кодовой базе, а также помогает разработчикам быстро находить и устранять дефекты, автоматизируя при этом тестирование сборки.
Bamboo
Bamboo Это сервер непрерывной интеграции, который выполняет автоматическую сборку, тестирование и выпуск в одном месте. Он бесперебойно работает с Jira и Bitbucket и поддерживает множество технологий, таких как Docker, Git, SVN, Mercurial и AWS.
TeamCity
TeamCity Это сервер непрерывной интеграции с множеством мощных функций. Он поддерживает работоспособность и стабильность сервера CI даже при отсутствии запущенных сборок и обеспечивает более высокое качество кода для любого проекта.
