Найти тему
"IT Самоучки"

CI/CD: от теории к практике - реальный пример успешного внедрения.

В этой статье я расскажу вам о концепции CI/CD, которая является неотъемлемой частью современной разработки программного обеспечения.

Сегодня порассуждаем про концепцию CI/CD, которая ныне на пике популярности в разработке софта.

Также найти множество интересной и полезной информации вы можете на канале Самоучки IT (Управление проектами) https://t.me/+NfVrLMxdKS0yNDNi

CI/CD - это Continuous Integration, Continuous Delivery - непрерывная интеграция, непрерывная поставка. Это одна из DevOps-практик, которая также относится к Agile-подходу. Автоматизация развертывания позволяет разработчикам сфокусироваться на реализации бизнес-требований, качестве кода и безопасности.

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

Многие ошибочно думают, что CI и CD - разные процессы. Но на самом деле они связаны как матрешки. Внутри - непрерывная интеграция, снаружи - непрерывная доставка. Основная их цель - увеличить стабильность выпусков и ускорить весь этот процесс.

Давайте по-полочкам разберем этапы CI/CD цикла:

1. Код . На этом этапе идет написание кода, покрытие его тестами, commit и push в систему контроля версий

2. Сборка. Система вроде Jenkins автоматически собирает ваши изменения и запускает их тестирование.

3. Тестирование. После успешного прохождения автоматических тестов изменения отдаются на ручное тестирование.

4. Релиз. После того, как команда тестировщиков проверила все изменения, у нас получается стабильная версия продукта – релиз-кандидат.

5. Деплой. Релизную ветку мы загружаем и разворачиваем на продакшен-сервере клиента.

6. Мониторинг. Следим за развернутой версией продукта и в случае проблем стабилизируем её или фиксим.

Также найти множество интересной и полезной информации вы можете на канале Самоучки IT (Управление проектами) https://t.me/+NfVrLMxdKS0yNDNi

CI/CD - это Continuous Integration, Continuous Delivery - непрерывная интеграция, непрерывная поставка. Это одна из DevOps-практик, которая также относится к Agile-подходу. Автоматизация развертывания позволяет разработчикам сфокусироваться на реализации бизнес-требований, качестве кода и безопасности.

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

Многие ошибочно думают, что CI и CD - разные процессы. Но на самом деле они связаны как матрешки. Внутри - непрерывная интеграция, снаружи - непрерывная доставка. Основная их цель - увеличить стабильность выпусков и ускорить весь этот процесс.

Давайте по-полочкам разберем этапы CI/CD цикла:

1. Код . На этом этапе идет написание кода, покрытие его тестами, commit и push в систему контроля версий

2. Сборка. Система вроде Jenkins автоматически собирает ваши изменения и запускает их тестирование.

3. Тестирование. После успешного прохождения автоматических тестов изменения отдаются на ручное тестирование.

4. Релиз. После того, как команда тестировщиков проверила все изменения, у нас получается стабильная версия продукта – релиз-кандидат.

5. Деплой. Релизную ветку мы загружаем и разворачиваем на продакшен-сервере клиента.

6. Мониторинг. Следим за развернутой версией продукта и в случае проблем стабилизируем её или фиксим.

Планирование. Планирование новой функциональности или внесение изменений для будущих релизов.

Теперь разберём, как CI/CD помогает автоматизировать эти шаги.

· Непрерывная интеграция — это автосборка и тестирование всего кода в общем репозитории после слияний. Команды часто используют feature flags или ветки для контроля готовности функционала. CI позволяет выявлять проблемы до деплоя кривого кода на прод.

· На этапе сборки упаковываются все компоненты ПО и БД. Запускаются модульные, функциональные, регрессионные тесты и другие виды тестов для проверки стабильности. Это непрерывное тестирование - важная часть CI/CD.

· Следующий этап - непрерывная поставка. Тут автоматизируется процесс подготовки релиза к деплою после CI. Настраиваются параметры окружений, выполняются необходимые запросы для перезапуска сервисов и т.д. DevOps команда берет протестированный релиз и выполняет все действия для деплоя на проде в пару кликов.

· Финальный шаг - непрерывное развёртывание (CD). Он включает все предыдущие шаги и суть его в том, чтобы развернуть изменения программиста в продакшене без дополнительных действий. Но для этого в команде должна быть культура мониторинга, чтобы в случае проблем можно было оперативно откатить изменения.

Ещё один важный момент - CI/CD конвейеры широко используются с Kubernetes и бессерверными архитектурами. Контейнеры позволяют стандартизировать упаковку, упрощают масштабирование окружений. А бессерверные вычисления типа AWS Lambda интегрируются в конвейеры через плагины.

В компаниях, где CI/CD внедрён, часто улучшаются ключевые DevOps метрики: частота деплоев, lead time для изменений, время восстановления после инцидентов. Но для этого нужно наладить весь процесс по методологии DevOps.

В общем, CI/CD - мощная практика для автоматизации разработки и деплоев. Команда разработчиков просто пишет код, а остальные шаги в конвейере выполняются на автомате. Такой подход экономит время и обеспечивает стабильность ПО.

А чтобы все это не было просто сухой теорией, расскажу реальный кейс из жизни.

Однажды мне довелось поработать в одной прогрессивной конторе, где CI/CD был поставлен на самом деле очень грамотно.

Команда разработчиков активно писала код в feature branches регулярно создавая pull request, для слияния изменений в мастер-ветку. После каждого такого merge автоматически запускался конвейер CI. Система типа Jenkins забирала новый код, собирала приложение, гоняла batch -тестов - юнит, интеграционные, регрессионные. Все это не занимало больше 10 минут.

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

Но самое крутое начиналось дальше. После успешной поставки в тест-окружения запускалась финальная стадия - непрерывное развёртывание. Конвейер автоматически деплоил собранную версию на продакшен сервера, обновлял контейнеры, переключал трафик, и свежая фича становилась доступной всем пользователям!

Согласитесь, это было очень круто - от написания строчки кода до релиза проходило всего минут 30 максимум, если все шло штатно. При этом человеческое вмешательство требовалось только на самом старте - коммит изменений. Остальным занималась магия CI/CD.

Плюс в углу офисной площадки красовался большой ТВ-экран, где транслировался статус всех активных сборок и деплоев - кто закоммитил (committed), на какой стадии идёт процесс, есть ли ошибки. Так что любой мог присмотреться если что пошло не так.

В общем, навороченный CI/CD конвейер сильно упрощал жизнь разработчикам и DevOpsам, позволяя много времени сэкономить на рутинных задачах поставки кода на прод. Да и со стабильностью системы не было никаких проблем благодаря повсеместному тестированию. Так что если доведете CI/CD до ума, то только в плюсе будете!

Ну что? Я надеюсь, теперь у вас более-менее все встало на свои места с этой концепцией. Оставляйте свои мнения и кейсы в комментах. А мы будем продолжать разбираться в крутых IT-темах на канале Самоучки IT (Управление проектами) https://t.me/+NfVrLMxdKS0yNDNi