Наша команда очень заинтересована в постоянном развертывании в последнее время, но мы столкнулись с небольшим препятствием в отношении того, как на самом деле получить код, развернутый на Heroku, - кажется неизбежным, что должно быть некоторое количество времени простоя для ввода кода в Heroku.
В традиционной среде развертывание кода, вероятно, будет выглядеть примерно так:
- Нажимайте код до промежуточного каталога где-нибудь (старый код все еще жив)
- Выполнить миграцию по базе данных (чаще всего безопаснее запускать миграцию заранее, а некоторые из них, которые могут сломать код, могут быть защищены)
- Извлеките половину (или некоторый процент серверов) из балансировки нагрузки.
- Разверните код для этих серверов.
- Если возможно, запустите какой-то автоматический smoke test/выполните серверы так, чтобы они были "горячими"
- Переключить, какие серверы находятся в балансировщике нагрузки и из него
- Промыть и повторить.
С Heroku у меня очень мало контроля над двумя критическими шагами:
- Сначала я не могу выполнить миграцию базы данных. Один из способов, которым я решил обойти это, - сохранить разветвления баз данных разветвленными отдельно и перенести их на герою в первую очередь - что в то время как болезненно, решит проблему - но только усугубит...
- Время разворота Dyno может занять довольно много времени - очевидно, это скорее вина Rails, чем Heroku, но ключевая проблема заключается в том, что я не могу сделать что-то вроде балансировки нагрузки, перетасованной выше, чтобы убедиться, что мой приложение готово и загружено до того, как вновь развернутый сервер вернется в балансировщик нагрузки. Вместо этого у меня практически нет выбора, кроме как предоставить пользователям 10-15-секундный экран загрузки и надеяться на лучшее (и сделать это TWICE, если я использую стратегию развертывания базы данных сверху).
В настоящее время мы используем экран обслуживания, но он не будет масштабируемым решением, если мы перейдем к полному непрерывному развертыванию (у нас, вероятно, будет около 10-20 развертываний в день и 10-20 * 30 секунд обслуживания экран начинает складываться)
Кто-нибудь сталкивается с подобными проблемами? Как вы обращались к ним? Любые отличные примеры исследований/истории успеха для истинного непрерывного развертывания на герою?