Существует ли инструмент развертывания (или набор инструментов), который поддерживает откат развертывания?

Я изучаю FluentMigrator. Что мне нравится в FM, так это то, что он поддерживает идею "Вперед" и "Назад" для миграций (то есть, вверх / вниз). Я считаю, что это не идеально в этом; Есть некоторые дыры. Тем не менее, это хорошо.

Это заставляет меня задуматься о том, существуют ли какие-либо инструменты развертывания (nant, msbuild или другие), которые поддерживают эту идею, касающуюся перемотки вперед и назад. Сценарий, в котором я его использую, - это развертывание веб-приложения со связанной базой данных.

В идеале я хотел бы настроить свое развертывание таким образом, чтобы в случае сбоя какой-либо части оно вернулось к предыдущей известной рабочей конфигурации. С FM это довольно легко сделать (но есть неровности), так что это покрывает БД. Как насчет файлов, которые составляют веб-приложение? Есть ли средства для развертывания, поддерживающие это?

Развертывание на Windows Server. Предположим, что я не могу внести какие-либо изменения на сервер.

3 ответа

Решение

Я не знаю каких-либо ориентированных на Microsoft автоматизированных инструментов обеспечения / развертывания, таких как Capistrano. Вот некоторые инструменты, о которых я слышал, но никогда не использовал:

Примерно три месяца назад мы проводили развертывание / подготовку с использованием пользовательских сценариев MSBuild. После подготовки сервера происходит автоматическое развертывание с использованием Robocopy для копирования файлов в общую папку на сервере приложений, обновления измененных двоичных файлов приложений и файлов разметки. У нас никогда не было необходимости откатывать какие-либо из наших развертываний, но, поскольку наши сценарии являются пользовательскими, мы могли бы написать логику, если бы нам это понадобилось.

MSBuild - ужасный язык развертывания / предоставления. В течение последних трех месяцев мы писали все новые сценарии и переносили их в PowerShell. Это чудесно. В версии 2 есть поддержка запуска команд на удаленных серверах, таких как SSH. Мы еще не использовали эту функциональность, но я с нетерпением жду возможности отправить сценарии установки на удаленный сервер для одновременной подготовки и развертывания.

Мы использовали Git для наших развертываний в течение последних 6 месяцев.

Вот весь процесс:

  1. CI сервер строит проект
  2. CI-сервер регистрирует его в локальном git-репозитории.
  3. CI-сервер вносит изменения в централизованное хранилище git.
  4. Пользователь создает пустой репозиторий на живом сервере
  5. Пользователь добавляет центральный репозиторий git к удаленным
  6. Пользователь тянет последнюю версию через https (не нужно открывать какие-либо порты)

Это много, чтобы настроить в начале, но после установки он отлично работает. Развертывание занимает несколько секунд, поскольку копируются только измененные файлы. Еще одна замечательная особенность этого метода заключается в том, что git хранит историю изменений, поэтому откат довольно прост. Вы также можете откатить несколько ревизий, и это делается прямо на живом сервере. Если что-то идет не так, как надо, это очень быстро.

Также вы можете сэкономить время, если вы используете хост-сервис git (github) для своего центрального хранилища.

Это очень краткое описание, но я могу дать вам больше информации, если хотите.

Конечно! Мой любимый это Capistrano. Первоначально он был построен для Ruby, но я обнаружил, что он работает так же хорошо для других языков.

https://github.com/capistrano/capistrano

Другие вопросы по тегам