Есть много вещей, которые вы могли бы сделать, чтобы улучшить процесс развертывания. Вот некоторые из них:
Убедитесь, что ваш код хорошо протестирован.
В идеале у вас должно быть 100% покрытие модульных тестов, а также интеграционное тестирование для каждого мыслимого сценария.
Если у вас этого нет, вам, вероятно, следует бросить все и позаботиться об этом.
Посмотрите на поведение, управляемое поведением.
Наличие полного набора тестов позволит вам ...
Запустите непрерывную интеграцию.
Всякий раз, когда кто-то фиксирует изменение, CI может автоматически запускать на нем набор тестов. Если набор тестов пройден, он может немедленно развернуться (или запланировать развертывание). Для изменений, которые не требуют значительных изменений в ваших базах данных, это одно сэкономит вам много времени и головной боли.
В случае возникновения проблем, CI также может дать вам откат в один клик.
CI гораздо менее полезен, если ваш набор тестов не является полным и правильным, так как вся предпосылка основана на возможности автоматически проверять ваш код.
Делать атомные обновления.
В идеале вы не должны просто копировать новые файлы поверх старых на производственном сервере. Вместо этого используйте инструмент, такой как capistrano, который копирует каждый файл в новое место, а затем использует символическую ссылку для указания на желаемое развертывание. Откат происходит мгновенно, поскольку включает в себя просто изменение символической ссылки, чтобы указать на предыдущее развертывание. (Хотя это не обязательно охватывает миграцию вашей базы данных.)
Также посмотрите, могут ли такие контейнеры, как Docker, помочь вам.
Делайте меньшие, более частые изменения.
Независимо от того, есть ли у вас тесты, КИ или ничего, одно это может вам существенно помочь. Каждое изменение должно иметь свою собственную ветку git, а развертывание должно иметь как можно меньше изменений. Поскольку изменения меньше, во время развертывания может быть меньше ошибок.
На этой ноте, сделайте изменения более изолированными, когда это возможно. Если вы внесли изменения в игру Омаха и это не касается Техасского Холдема, 5-карточного стад-покера или чего-либо еще, то это единственная игра, которую необходимо приостановить для проведения технического обслуживания.
Проанализируйте что-нибудь длительное.
Вы упомянули, что некоторые части ваших развертываний занимают много времени. Это, вероятно, изменения схемы базы данных. Стоит, чтобы администратор БД просмотрел вашу базу данных вместе с каждым изменением схемы, чтобы увидеть, что может работать лучше.
Попросите эксперта по предмету взглянуть на любую другую часть развертывания, которая занимает много времени.
Работа нечетные часы.
Возможно, вы уже делаете это, но это стоит упомянуть. Не следует ожидать, что разработчики (и системные администраторы!) Будут работать с 9 до 5, особенно в режиме 24x7. Если ожидается, что кто-то проведет ночные часы, присматривая за развертыванием, исправляя какие-либо проблемы, а затем соблюдая дневное расписание, ваши ожидания нереалистичны, и вы настраиваете этого человека на выгорание.