CI/CD и развёртывание
Превратить зелёный набор тестов в работающий продакшен-сервис -- автоматически, безопасно и не теряя запросов.
git pull" на повторяемый конвейер, который машина выполняет одинаково каждый раз.
- описать классические стадии конвейера -- линтер -> тесты -> сборка -> развёртывание -- и понять, почему важен порядок;
- разделять окружения (dev, staging, production) и продвигать один артефакт по ним;
- работать с секретами в CI, ни разу не закоммитив их в репозиторий;
- объяснить развёртывание без простоя и сравнить стратегии rolling, blue-green и canary;
- читать настоящий workflow GitHub Actions и понимать, что даёт каждый шаг.
1. CI и CD -- три термина, которые путают
За тремя буквами скрываются три разные идеи. Если чётко их различать, любой инструмент и любое руководство становятся понятнее.
- Непрерывная интеграция (CI) -- при каждом push и каждом pull request автоматическое задание выгружает код, ставит зависимости, запускает линтер, прогоняет тесты и делает сборку. Обещание узкое, но мощное: "main всегда компилируется и проходит тесты."
- Непрерывная поставка (Continuous Delivery, CD) -- каждая зелёная сборка автоматически упаковывается в разворачиваемый артефакт (образ Docker, tar-архив, версионированный бандл) и доставляется вплоть до staging. Кнопку "выкатить в продакшен" всё ещё нажимает человек.
- Непрерывное развёртывание (Continuous Deployment, тоже CD) -- то же самое, но и последний шаг автоматический: зелёная сборка на main доходит до продакшена без участия человека.
Большинство команд запускают CI плюс поставку, а затем переходят к полному развёртыванию, когда их тесты, мониторинг и откат становятся достаточно надёжными, чтобы отказаться от ручного нажатия. Конвейер один и тот же; различается лишь финальное подтверждение.
Зачем вообще автоматизировать? Ручной деплой -- это чек-лист, который в пятницу в шесть вечера выполняет уставший человек. Конвейер -- тот же чек-лист, который машина выполняет одинаково каждый раз и с логом, который можно проверить. Он убирает целый класс инцидентов вида "у меня же работало" и "я забыл выполнить миграцию".