Ответ
На последнем проекте мы использовали полностью автоматизированный CI/CD пайплайн на GitLab CI. Процесс выглядел так:
-
Сборка и тестирование: При пуше в ветку
mainзапускался пайплайн:# .gitlab-ci.yml stages: - test - build - deploy test: stage: test script: - docker-compose run --rm app npm test - docker-compose run --rm app python manage.py test build: stage: build script: - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA . - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA -
Деплой в продакшн: После успешного прохождения тестов и мануального подтверждения в GitLab (manual gate) запускался деплой на Kubernetes-кластер:
deploy:prod: stage: deploy environment: production script: - kubectl set image deployment/my-app app=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA -n production - kubectl rollout status deployment/my-app -n production --timeout=300s -
Стратегия и мониторинг: Мы применяли стратегию rolling update для нулевого простоя. Сразу после деплоя запускались smoke-тесты через Postman, и мы отслеживали метрики в Grafana (ошибки 5xx, latency, RPS) и логи в ELK-стеке. Откат выполнялся командой
kubectl rollout undo, если метрики выходили за допустимые пределы.