Наша команда в последнее время очень заинтересована в непрерывном развертывании, но мы столкнулись с небольшим препятствием в том, как на самом деле развернуть код на Heroku - кажется неизбежным, что должно быть некоторое количество простоя нажать код для Heroku.
В традиционной среде развертывание кода, вероятно, будет выглядеть примерно так:
- Нажмите код где-нибудь в промежуточный каталог (старый код все еще активен)
- Запуск миграций для базы данных (чаще всего миграция выполняется безопаснее, и те, кто нарушит код, могут быть защищены от этого)
- Извлечь половину (или некоторый процент серверов) из балансировщика нагрузки.
- Развертывание кода на этих серверах.
- Если возможно, запустите какой-нибудь автоматический тест дыма / проверьте серверы, чтобы они были «горячими»
- Переключение, какие серверы входят и выключаются балансировщиком нагрузки
- Сполосните и повторите.
С Heroku у меня очень мало контроля над двумя критическими шагами:
- Сначала я не могу запустить миграцию базы данных. Один из способов, который я решил обойти, состоит в том, чтобы разделить миграции баз данных по отдельности, и сначала перенести их на heroku - что, хотя и болезненно, решило бы проблему - но только усугубило ...
- Время раскрутки Dyno может занять довольно много времени - очевидно, это больше вина Rails, чем Heroku, но ключевая проблема заключается в том, что я не могу сделать что-то вроде перемешивания балансировки нагрузки выше, чтобы гарантировать, что мой приложение готово и загружено до того, как вновь развернутый сервер снова помещен в балансировщик нагрузки. Вместо этого у меня почти нет выбора, кроме как дать пользователям экран загрузки на 10-15 секунд и надеяться на лучшее (и делаю это ДВАЖДЫ, если я использую стратегию развертывания базы данных сверху)
В настоящее время мы используем экран обслуживания, но это не будет масштабируемым решением, если мы перейдем к полному непрерывному развертыванию (у нас, вероятно, будет 10-20 развертываний в день и 10-20 * 30 секунд обслуживания). экран начинает складываться)
Кто-нибудь сталкивался с подобными проблемами? Как вы к ним обратились? Какие-нибудь отличные примеры / истории успеха для true непрерывного развертывания на heroku?