CI-CD: принципы, пайплайн, стадии, артефакты

↑ Этап 3 · CI-CD

Обязательно~4 мин чтенияУровень: middle

Зачем это на собесе

Базовый вопрос: что такое CI, CD (Delivery и Deployment), из каких стадий состоит пайплайн и что такое артефакт.

Термины

ТерминСуть
CI (Continuous Integration)частая интеграция изменений в общую ветку с автоматической сборкой и проверками (минимум раз в день на разработчика)
Continuous Deliveryкаждый успешный коммит готов к выкатке: артефакт собран и протестирован; релиз запускается вручную (кнопка)
Continuous Deploymentкаждый успешный коммит автоматически попадает в продакшн без ручного шага

Цель: короткий цикл обратной связи, малые безопасные изменения, воспроизводимые релизы, меньше ручных операций и рисков.

Типовой пайплайн

commit/PR → [build] → [test: unit] → [lint / SAST / SCA] → [package: образ, артефакт]
          → [integration/e2e на review-стенде] → [publish в реестр]
          → deploy dev → deploy staging (smoke/e2e) → [ручное подтверждение] → deploy prod → [post-deploy проверки, мониторинг, откат]

Стадии (stages) выполняются последовательно, задания (jobs) внутри стадии — параллельно. Принципы:

  • fail fast: быстрые дешёвые проверки (линт, unit) первыми;
  • параллелизм независимых заданий;
  • детерминированность: одинаковый результат при повторе (фиксированные версии инструментов, закреплённые базовые образы);
  • pipeline as code: описание пайплайна в репозитории (.gitlab-ci.yml, .github/workflows/*.yml, Jenkinsfile);
  • build once, deploy many: артефакт собирается один раз и продвигается по окружениям;
  • изоляция: сборка в чистых контейнерах/раннерах (эфемерные агенты);
  • обратная связь: статусы в PR, уведомления, отчёты о тестах и покрытии;
  • безопасность: секреты в защищённых переменных, минимальные права токенов, запуск на защищённых ветках.

Артефакты

Артефакт — результат этапа сборки, передаваемый дальше: Docker-образ, .dll/пакет NuGet, dist фронтенда, Helm-чарт, отчёты тестов, SBOM.

  • между заданиями пайплайна: artifacts: (GitLab), actions/upload-artifact (GitHub);
  • долговременное хранение: реестры (Container Registry, Nexus, Artifactory, NuGet/npm-реестры), с версией и метаданными (коммит, время сборки);
  • артефакты неизменяемы и версионируются (SemVer + SHA);
  • срок хранения (expire_in) для временных файлов; очистка.

Окружения и среды

ОкружениеНазначение
Review / Previewвременное окружение под MR/PR (ревью фичи)
Devинтеграция последнего main
Staging / Pre-prodкопия продакшна для приёмки, нагрузки и smoke
Productionреальные пользователи

Конфигурация и секреты отличаются по окружениям; образ — один и тот же. Защищённые окружения: ручное подтверждение, ограниченный круг, окна релизов.

Триггеры

  • push в ветку, создание/обновление MR/PR;
  • тег (релиз): v*;
  • расписание (nightly сборки, сканирование зависимостей);
  • ручной запуск (workflow_dispatch, when: manual) с параметрами;
  • вебхук/API, событие другого пайплайна (мультипроектные, needs/trigger).

Разные сценарии: MR-пайплайн (быстрые проверки), main (полная сборка, публикация, деплой в dev), тег (релиз и прод).

Ключевые практики

  1. Кэширование зависимостей (NuGet, npm, Docker layers): ускорение.
  2. Тестовая пирамида в пайплайне: много unit, меньше интеграционных, мало e2e; интеграционные на Testcontainers.
  3. Статический анализ: линтеры, SAST (Semgrep, SonarQube, CodeQL), сканирование зависимостей (SCA: Dependabot, Trivy), секреты (gitleaks), образы (Trivy).
  4. Quality gates: порог покрытия, отсутствие критичных уязвимостей, успешные тесты: MR нельзя слить при красном пайплайне.
  5. Версионирование и changelog автоматически.
  6. Миграции БД — обратно совместимые, отдельный управляемый шаг.
  7. Стратегии выкладки: rolling, blue-green, canary, feature flags; откат — возврат предыдущего артефакта.
  8. GitOps: состояние окружений в Git, агент (ArgoCD/Flux) синхронизирует.
  9. Наблюдаемость деплоя: метки релиза в мониторинге, автоматический откат по метрикам.
  10. Метрики: DORA (частота деплоев, lead time, change failure rate, MTTR).

Антипаттерны

  • долгий пайплайн (30+ минут) — разработчики обходят;
  • нестабильные (flaky) тесты — недоверие;
  • ручные шаги «только для релиза» в скриптах на чьём-то ноутбуке;
  • пересборка артефакта для каждого окружения;
  • секреты в репозитории/логах;
  • прямые изменения на сервере в обход пайплайна;
  • отсутствие отката;
  • пайплайн с правами администратора на всё.

Инструменты

GitLab CI, GitHub Actions, Jenkins, TeamCity, Azure DevOps Pipelines, CircleCI, Drone/Woodpecker, Tekton, Argo Workflows, Dagger. Деплой: Helm, Kustomize, ArgoCD/Flux, Ansible, Terraform, Octopus Deploy.

Вопросы с ответами