Как бы ты построил CI/CD для проекта
Вопрос
Как бы ты построил CI/CD для веб-приложения с нуля?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
На каждый PR: npm ci, линтер, типы, unit-тесты, сборка
Быстрые проверки первыми, независимые джобы параллельно, кеш зависимостей
Защита ветки main: мерж только с зелёным CI и ревью
Сборка один раз, артефакт (образ) с версией продвигается по стендам
Деплой на стенд автоматически, на прод с подтверждением или автоматически при хорошем покрытии
План отката и миграции, совместимые с предыдущей версией
Что могут спросить следом
- Как ускорить пайплайн, который идёт 25 минут?
- Где хранить секреты и кто к ним имеет доступ?
- Как откатишься, если после релиза выросли ошибки?
Разбор
Начну с проверок на каждый pull request: npm ci, линтер и проверка типов, unit-тесты, сборка. Быстрые шаги идут первыми, независимые джобы параллельно, зависимости кешируются по хешу lock-файла. Ветка main защищена: влить можно только с зелёным CI и одобренным ревью.
После мержа в main собираю артефакт один раз, например Docker-образ с тегом по SHA коммита. Этот же образ едет на стенд, там прогоняются e2e, и потом он же уходит на прод. Пересобирать для прода нельзя, иначе проверяли одно, а выкатили другое.
Деплой на прод делаю через environment с подтверждением, а когда тестам можно доверять, полностью автоматически. Стратегия rolling или blue-green, миграции обратно совместимые. Секреты в хранилище окружения, а не в коде. И всегда есть откат: предыдущий образ можно вернуть одной командой, а после выкатки смотрю на ошибки и метрики.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.