CI/CD — практики автоматизации процесса доставки кода от разработчика в продакшен. CI (Continuous Integration) — интеграция кода, CD может означать Continuous Delivery или Continuous Deployment.
Без CI/CD
Разработчик пишет код. Потом раз в неделю/месяц/квартал:
- Сливаются все изменения
- Тестируются вручную
- Деплоятся вручную
- Конфликты, ошибки
- Выпуск — стрессовое событие
С CI
- Каждый коммит → автоматическая сборка
- Запуск тестов
- Линтеры, проверка качества
- Если всё ок — мерж в main
- Ошибки находятся рано
С CD
- Continuous Delivery: код готов к релизу в любой момент, выкат — по кнопке
- Continuous Deployment: каждый merge = автоматический деплой в прод
- Netflix, Amazon деплоят тысячи раз в день
Типичный pipeline
- Разработчик делает commit → push
- CI-система получает webhook
- Pull кода
- Запуск линтеров, статического анализа
- Unit-тесты
- Сборка (compile, build, docker image)
- Integration-тесты
- Security-сканирование
- Публикация артефакта (npm, Docker Hub, S3)
- Деплой в staging
- E2E тесты
- Approval (если ручной)
- Деплой в production
- Smoke-тесты
- Уведомление
Инструменты
- GitHub Actions: интегрирован с GitHub
- GitLab CI: встроен в GitLab
- Jenkins: ветеран, self-hosted, мощный
- CircleCI: облачный
- TeamCity: JetBrains
- Bitbucket Pipelines
- Drone, Concourse: open-source
- ArgoCD, Flux: GitOps для K8s
GitHub Actions пример
name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: {node-version: 20}
- run: npm ci
- run: npm test
- run: npm run buildСтратегии деплоя
- Recreate: остановить старое, запустить новое. Даунтайм
- Rolling: постепенная замена
- Blue-Green: две среды, переключаем трафик
- Canary: сначала 1-5% трафика, наблюдаем, потом все 100%
- Feature flags: развернуто для всех, но включено только для некоторых
Feature flags
- LaunchDarkly, Unleash, Flagsmith: платформы
- Separate deployment from release
- A/B тесты
- Мгновенное отключение (kill switch)
Артефакты
- Docker images: Docker Hub, AWS ECR, GitHub Container Registry
- NPM packages: npmjs.com, private registries
- Maven/Gradle: Nexus, Artifactory
- Иммутабельность: артефакт не меняется после сборки
Безопасность
- Сканирование зависимостей: Dependabot, Snyk
- SAST (статический анализ): SonarQube, CodeQL
- DAST (динамический): OWASP ZAP
- Сканирование образов: Trivy, Clair
- Secrets management: не храните секреты в коде!
Secrets
- GitHub Actions secrets, GitLab variables
- HashiCorp Vault
- AWS Secrets Manager
- Kubernetes Secrets (с шифрованием)
Мониторинг деплоев
- Datadog, New Relic, Sentry — отслеживание ошибок
- Автоматический откат при росте ошибок
- SLI/SLO: метрики уровня сервиса
Антипаттерны
- Длинные pipeline (>30 мин) — разработчики теряют фокус
- Flaky tests (плавающие ошибки) — теряется доверие
- Ручные шаги в середине — теряется автоматизация
- Отсутствие отката — одна ошибка = авария
- Секреты в коде
Метрики DORA
- Deployment frequency: как часто деплоим
- Lead time for changes: от коммита до прод
- Change failure rate: процент плохих деплоев
- Mean time to recovery: как быстро восстанавливаемся
Культура
CI/CD — это не только инструменты. Это культура:
- Каждый коммит достоин релиза
- Небольшие изменения вместо больших
- Автоматизация всего
- Ответственность разработчиков до production
- Blameless postmortems при инцидентах
Есть вопрос?
Вопросы и ответы · 0
Не поняли что-то?
Зарегистрируйтесь — и сможете задать вопрос автору объяснения.
Загрузка комментариев…