Как происходит деплой сервисов: автоматический или ручной?
Что проверяют
Работали ли вы с настоящим конвейером поставки и понимаете ли, что происходит между мержем и работающим кодом на проде. Следом обычно спрашивают, как вы откатываете неудачный релиз и когда применяются миграции.
Как отвечать
В большинстве команд сборка и выкладка автоматические, а ручным остаётся только решение «катить на прод». Опишите конвейер по шагам:
- CI: на каждый пуш запускаются линтер (
ruff), проверка типов (mypy) и тестыpytest. При зелёном прогоне собирается Docker-образ с тегом по хешу коммита и уходит в registry; - CD: на стейджинг образ едет сам, на прод по мержу в
mainили по кнопке: manual job в GitLab CI, environment с обязательным подтверждением в GitHub Actions; - выкладка: в Kubernetes это
Deploymentс rolling update и readiness-пробой, без кластераdocker compose pullиup -dна ВМ или Ansible-плейбук; - процесс: сервис крутится под
gunicornилиuvicornс несколькими воркерами и должен дорабатывать текущие запросы поSIGTERM, иначе каждый релиз рвёт часть соединений; - миграции: Alembic или
manage.py migrateотдельным шагом до переключения трафика, причём совместимые со старой версией кода, которая ещё работает.
Про ручной деплой скажите честно: он допустим на старте проекта или для разовой операции, но каждый ручной шаг это место, где забудут переменную окружения или выкатят не ту ветку. Признак зрелого процесса: образ собирается один раз, и именно он проходит через все окружения, а конфигурация приходит из переменных окружения.
Закончите откатом: предыдущий тег образа, kubectl rollout undo, фиче-флаг, который выключает новую логику без релиза.
Где спотыкаются
Отвечают «деплоем занимаются девопсы». Для бэкенд-разработчика это слабая позиция: от вашего кода зависят и graceful shutdown, и совместимость миграций, и health-check.
Пересобирают образ под каждое окружение. Тогда на прод едет не то, что прошло тесты на стейджинге.
Не думают о миграциях при rolling update: переименовали колонку, и старые поды, которые ещё обслуживают трафик, начинают падать с ошибкой.