Ответ
Доставка кода — это автоматизированный конвейер (pipeline), который превращает коммит в работающее приложение. В моей практике это выглядит так:
-
Коммит и CI (Continuous Integration): После пуша в Git (например, в ветку
main) автоматически запускается пайплайн (GitLab CI/CD, GitHub Actions). Он выполняет:- Сборку артефакта (например, Docker-образа).
- Запуск юнит- и интеграционных тестов.
# Пример этапа сборки в .gitlab-ci.yml build: stage: build script: - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA . - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
-
CD (Continuous Delivery/Deployment): Успешная сборка запускает этап деплоя. Мы используем стратегию blue-green в Kubernetes для минимизации даунтайма.
- Новую версию ("green") разворачиваем параллельно со старой ("blue").
- Направляем тестовый трафик (например, через Istio VirtualService) на "green" для проверки.
- После успешных smoke-тестов переключаем весь трафик.
-
Откат (Rollback): При обнаружении проблем (например, через алерты в Prometheus/Grafana) откатываемся на предыдущую стабильную версию одной командой:
kubectl rollout undo deployment/my-app. Все конфигурации инфраструктуры хранятся как код (Terraform, Helm), что делает процесс полностью воспроизводимым и контролируемым.