1.2 CI/CD: Непрерывная интеграция и доставка

1.2 CI/CD: Непрерывная интеграция и доставка #

🎯 Что такое CI/CD простыми словами #

CI/CD — это автоматизация процесса от написания кода до его доставки пользователям.

Представьте кондитерскую:

  • CI (Continuous Integration) — каждый раз, когда кондитер добавляет ингредиент, автоматически проверяется вкус
  • CD (Continuous Deployment) — готовые пирожные автоматически попадают на витрину

🔄 Как работает CI/CD Pipeline #

Традиционный подход (без CI/CD) #

Традиционный подход (без CI/CD):

  • Разработка (2 недели) → Ручное тестирование (1 неделя) → Ручной деплой (2 дня) → Проблемы в продакшене (много стресса)

С CI/CD #

Подход с CI/CD:

  • Отправка кода (1 минута) → Автоматическое тестирование (5 минут) → Автоматическое развертывание (10 минут) → Мониторинг и уведомления

🛠️ Основные этапы CI/CD Pipeline #

1. Source - Исходный код #

Пример запуска pipeline: Разработчик выполняет следующие команды Git:

  • Добавляет все изменения в стейджинг
  • Создает коммит с описанием новой функции
  • Отправляет изменения на главную ветку

Это автоматически запускает весь CI/CD pipeline!

2. Lint - Проверка качества кода #

Пример настройки линтинга: Команды для проверки качества кода:

  • ESLint для проверки JavaScript кода
  • Pylint для анализа Python файлов
  • golangci-lint для проверки Go кода

Что проверяет линтинг:

  • Стиль кодирования (отступы, скобки, именование)
  • Потенциальные ошибки и code smells
  • Соответствие coding standards команды
  • Безопасность (находит уязвимости)

# 🔥 ВАЖНО: ПИШИТЕ ДОКУ!

Линтеры часто ругаются на отсутствие документации. Документированный код = качественный код. Настройте линтеры так, чтобы они требовали комментарии к функциям, классам и сложной логике.

3. Build - Сборка #

Пример сборки приложения: Команды для сборки:

  • Установка зависимостей через npm
  • Запуск сборки проекта

4. Test - Тестирование #

Пример запуска тестов: Команды для тестирования:

  • Запуск стандартных тестов
  • Выполнение end-to-end тестов

5. Deploy - Развертывание #

Пример развертывания: Команды для деплоя:

  • Сборка Docker-образа приложения
  • Отправка образа в реестр
  • Применение конфигурации Kubernetes

💡 Реальный пример CI/CD #

Команда разработки интернет-магазина #

Проблема без CI/CD:

  • Релизы раз в месяц
  • 2 дня на тестирование
  • Часто ломается продакшен
  • Стресс команды

Решение с CI/CD: Пример конфигурации CI/CD для интернет-магазина:

Конфигурация GitHub Actions, которая запускается при каждом пуше в главную ветку:

Основные этапы pipeline:

  1. Подготовка окружения с Node.js версии 16
  2. Установка зависимостей проекта
  3. Проверка качества кода через линтер
  4. Запуск модульных тестов
  5. Выполнение интеграционных тестов
  6. Сборка приложения
  7. Автоматическое развертывание на staging-среду
  8. Запуск smoke-тестов для проверки основного функционала
  9. Деплой в продакшен (только при успешном прохождении всех предыдущих этапов)

Результат:

  • Релизы несколько раз в день
  • Автоматическое тестирование
  • Быстрый откат при проблемах
  • Счастливая команда 😊

🎯 Типы CI/CD стратегий #

1. Blue-Green Deployment #

Blue-Green Deployment: Метод развертывания с двумя идентичными окружениями:

  • Текущая версия (Blue) обслуживает пользователей
  • Новая версия (Green) развертывается и тестируется параллельно
  • После успешной проверки происходит мгновенное переключение трафика на новую версию

2. Rolling Deployment #

Rolling Deployment: Постепенное обновление серверов по одному:

  • Сервер 1: обновляется с версии 1.0 до 2.0
  • Сервер 2: обновляется с версии 1.0 до 2.0
  • Сервер 3: обновляется с версии 1.0 до 2.0
  • Сервер 4: обновляется с версии 1.0 до 2.0

При этом сервис остается доступным во время обновления

3. Canary Deployment #

Canary Deployment: Постепенное внедрение новой версии:

  • 99% пользователей продолжают работать с стабильной версией 1.0
  • 1% пользователей тестируют новую версию 2.0
  • При успешном тестировании: постепенное переключение 100% пользователей на новую версию

🛠️ Популярные инструменты CI/CD #

Облачные решения #

  • GitHub Actions - интеграция с GitHub
  • GitLab CI - встроенное в GitLab
  • Azure DevOps - от Microsoft
  • AWS CodePipeline - от Amazon

Self-hosted решения #

  • Jenkins - старый, но надежный
  • TeamCity - от JetBrains
  • Bamboo - от Atlassian

🏆 Лучшие практики CI/CD #

1. Делайте commit’ы часто #

Примеры коммитов:

Неправильно: Один большой коммит с множеством изменений

Правильно: Несколько маленьких коммитов с четкими описаниями:

  • Добавление валидации пользователя
  • Добавление обработки ошибок
  • Добавление тестов для валидации

2. Пишите хорошие тесты #

Примеры тестов:

Неправильно: Бессмысленный тест, который всегда проходит

Правильно: Осмысленный тест, который проверяет конкретную функциональность:

  • Создает заказ с двумя товарами
  • Рассчитывает сумму со скидкой 10%
  • Проверяет, что результат равен 90

3. Быстрый feedback #

  • Тесты должны работать < 10 минут
  • Уведомления о падении в Slack/email
  • Красивые dashboards с метриками

4. Безопасность #

Правила безопасности:

Никогда не сохраняйте пароли и ключи непосредственно в коде!

Используйте систему управления секретами (например, GitHub Secrets) для безопасного хранения конфиденциальной информации

📊 Метрики успеха CI/CD #

DORA метрики #

  1. Deployment Frequency - как часто деплоим
  2. Lead Time - время от коммита до продакшена
  3. MTTR - время восстановления после сбоя
  4. Change Failure Rate - процент неудачных изменений

Примеры хороших показателей #

Метрики элитных команд:

  • Частота деплоев: несколько раз в день
  • Время от коммита до продакшена: меньше 1 часа
  • Время восстановления: меньше 1 часа
  • Процент неудачных изменений: 0-15%

Метрики отстающих команд:

  • Частота деплоев: раз в месяц или полгода
  • Время от коммита до продакшена: 1-6 месяцев
  • Время восстановления: от недели до месяца
  • Процент неудачных изменений: 46-60%

🎯 Понимание концепций #

После изучения этого раздела вы должны понимать:

Что такое CI/CD и зачем это нужно
Разницу между CI и CD
Основные этапы CI/CD pipeline
Популярные инструменты и их назначение
Метрики успеха DevOps команд

Практические задания по настройке CI/CD pipeline вы найдете в Главе 2: Основные технологии

🔗 Полезные ресурсы #

Документация #

Обучающие материалы #

🎯 Заключение #

CI/CD — это не просто инструменты, это культура быстрой и безопасной доставки. Основные принципы:

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

Помните: Хороший CI/CD pipeline — это инвестиция в спокойную жизнь команды. Потратьте время на настройку сейчас, чтобы не тушить пожары потом.


** В реальных проектах деплой в продакшен чаще всего выполняется по кнопке (manual approval), а не полностью автоматически, для дополнительного контроля.

Следующий раздел: 1.3 Infrastructure as Code (IaC)