Я у себя так сделал, если происходит пуш в ветку rc, то CI её автоматически деплоид на прод и ветку rc убивает.
Помогает уменьшить количество bugfix коммитов в мастере)
В идеале я себе это вижу так - CI деплоит новое окружение и переключает на него трафик не убивая окружение мастера.
Далее смотришь в логи, если повалили ошибки, кнопку отката, трафик переключается обратно на рабочий код.
В идеале конечно и откат чтобы был автоматический, типа как sentry отслеживает с какого релиза были ошибки, если ошибка новая - сразу откат.
Ну это так, мои влажные фантазии