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:
- Подготовка окружения с Node.js версии 16
- Установка зависимостей проекта
- Проверка качества кода через линтер
- Запуск модульных тестов
- Выполнение интеграционных тестов
- Сборка приложения
- Автоматическое развертывание на staging-среду
- Запуск smoke-тестов для проверки основного функционала
- Деплой в продакшен (только при успешном прохождении всех предыдущих этапов)
Результат:
- Релизы несколько раз в день
- Автоматическое тестирование
- Быстрый откат при проблемах
- Счастливая команда 😊
🎯 Типы 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 метрики #
- Deployment Frequency - как часто деплоим
- Lead Time - время от коммита до продакшена
- MTTR - время восстановления после сбоя
- 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 Best Practices
- The Phoenix Project - книга
- State of DevOps Report - ежегодный отчет
🎯 Заключение #
CI/CD — это не просто инструменты, это культура быстрой и безопасной доставки. Основные принципы:
✅ Автоматизируйте всё, что можно автоматизировать
✅ Тестируйте рано и часто
✅ Делайте маленькие изменения регулярно
✅ Мониторьте результаты и учитесь на ошибках
✅ Безопасность должна быть встроена в процесс
Помните: Хороший CI/CD pipeline — это инвестиция в спокойную жизнь команды. Потратьте время на настройку сейчас, чтобы не тушить пожары потом.
** В реальных проектах деплой в продакшен чаще всего выполняется по кнопке (manual approval), а не полностью автоматически, для дополнительного контроля.
Следующий раздел: 1.3 Infrastructure as Code (IaC)