← Теория

🚀 Блок 07 — CI/CD Ozon

Git · Docker · CI/CD · Pipelines · GitLab CI · Деплой

🌿 1. Git — контроль версий

Git — система контроля версий. Отслеживает все изменения в коде. Несколько разработчиков работают параллельно.

Основные понятия

ПонятиеЧто этоАналогия
Repository (repo)Папка с кодом + история измененийПроект
CommitСохранение (снимок) текущего состоянияСохранить игру
BranchВетка — отдельная линия разработкиПараллельный мир
MergeСлияние ветокСоединить два мира
Pull Request (PR) / MRЗапрос на слияние ветки + код-ревью«Проверьте мои изменения»
CloneСкачать репозиторийСкопировать проект
PushОтправить свои коммиты на серверЗагрузить
PullСкачать чужие измененияОбновить

Workflow (как работает команда)

main — основная ветка (прод)
  └── feature/DS-702 — ветка разработчика
      └── пишет код → commit → push
      └── создаёт Merge Request
      └── код-ревью → тестирует QA
      └── merge в main → деплой

Частые команды

git status # что изменилось
git add . # добавить все файлы
git commit -m "DS-702: fix login"
git push origin feature/DS-702
git pull origin main
git checkout -b feature/DS-702 # создать ветку
git log --oneline # история коммитов
На собе: "Git — контроль версий. Разработчик работает в feature-ветке, делает MR, QA тестирует, после ревью мержат в main. Я получала ветки для тестирования через MR."

🐳 2. Docker

Docker — инструмент для упаковки приложения в контейнер. Контейнер включает всё необходимое для запуска: код, библиотеки, настройки.

Зачем нужен

Основные понятия

ПонятиеЧто этоАналогия
Image (образ)Шаблон для создания контейнераРецепт блюда
Container (контейнер)Запущенный экземпляр образаПриготовленное блюдо
DockerfileИнструкция для создания образаРецепт (шаг за шагом)
Docker ComposeЗапуск нескольких контейнеров вместеЗаказ комплексного обеда

Пример Dockerfile

FROM node:18 # базовый образ
WORKDIR /app # рабочая папка
COPY package.json . # копируем зависимости
RUN npm install # устанавливаем
COPY . . # копируем код
CMD ["npm", "start"] # запускаем

Частые команды

docker build -t myapp . # собрать образ
docker run -p 3000:3000 myapp # запустить контейнер
docker ps # запущенные контейнеры
docker stop <id> # остановить
docker-compose up # запустить всё из compose
На собе: "Docker упаковывает приложение в контейнер со всеми зависимостями. Контейнер одинаково работает на любой машине. Image = шаблон, Container = запущенный экземпляр. Docker Compose — для запуска нескольких контейнеров."

🔄 3. CI/CD — что это

CI/CD — автоматизация сборки, тестирования и развёртывания.

CI = Continuous Integration (Непрерывная интеграция)

CD = Continuous Delivery / Deployment (Непрерывная доставка)

Pipeline (пайплайн)

Push → Build → Test → Deploy

┌─────────┐ ┌─────────┐ ┌──────────┐ ┌─────────┐
│ Push │ → │ Build │ → │ Test │ → │ Deploy │
│ (код) │ │ (сборка)│ │ (тесты) │ │ (стенд) │
└─────────┘ └─────────┘ └──────────┘ └─────────┘
                          ↓ упал тест?
                          ❌ Pipeline FAILED → не деплоим!

Стадии пайплайна

СтадияЧто делаетУпало = ?
BuildКомпиляция / сборка проектаКод не компилируется
LintПроверка стиля кодаНарушен стиль
TestАвтотесты (unit, integration)Тест не прошёл
Deploy stagingВыкатка на тестовый стендQA не сможет тестировать
Deploy prodВыкатка на прод (после ручного подтверждения)Критично!
На собе: "CI — автоматическая сборка и тестирование при каждом пуше. CD — автоматический деплой. Pipeline = цепочка стадий: build → test → deploy. Если тест упал — деплой не происходит."

🦊 4. GitLab CI

В Ozon стек — GitLab CI. Конфиг пайплайна описывается в файле .gitlab-ci.yml в корне репозитория.

Пример .gitlab-ci.yml

stages:
  - build
  - test
  - deploy

build-job:
  stage: build
  script:
    - npm install
    - npm run build

test-job:
  stage: test
  script:
    - npm run test

deploy-staging:
  stage: deploy
  script:
    - deploy-to staging
  when: manual # ручной запуск

Концепции GitLab CI

ПонятиеЧто значит
PipelineВесь процесс от push до deploy
StageЭтап (build, test, deploy)
JobКонкретная задача внутри stage
RunnerСервер, который выполняет jobs
ArtifactФайлы, которые сохраняются после job (например отчёт Allure)

Где QA видит результаты

На собе: "GitLab CI — пайплайн описывается в .gitlab-ci.yml. Стадии: build, test, deploy. QA видит статус пайплайна в Merge Request: если автотесты упали — MR не мержим."

🌍 5. Окружения (Environments)

ОкружениеДля чегоКто тестирует
Local / DevРазработка, отладкаРазработчик сам
Staging / QAТестирование перед продомQA (ты!)
Pre-prodФинальная проверка, максимально похоже на продQA + команда
Production (Prod)Реальные пользователиМониторинг + регресс

Deploy flow

feature-ветка → review-app (для QA)
merge to main → staging (автоматически)
тег/релиз → pre-prod → production (ручное подтверждение)
На собе: "Основные окружения: dev → staging → pre-prod → production. QA тестирует на staging. Deploys на прод — после подтверждения и тестирования."

💬 Вопросы для самопроверки