Автоматизировать развертывание для веб-приложений?

Моя команда в настоящее время пытается автоматизировать развертывание наших .Net и PHP веб-приложений. Мы хотим оптимизировать развертывание и избегать проблем и многих головных болей, вызванных их выполнением вручную.

Мы требуем решения, которое позволит нам:

- Compile the application - Version the application with the SVN version number - Backup the existing site - Deploy to a web farm 

Все наши приложения контролируются с помощью SVN, а наши .Net-приложения используют CruiseControl. Мы пытались использовать сценарии развертывания MSBuild и NAnt с ограниченным успехом. Мы также использовали Capistrano в прошлом, но хотим избежать использования Ruby, если это возможно.

Есть ли другие инструменты развертывания, которые помогут нам?

Спасибо всем за ваши добрые предложения. Мы проверили их все, но после тщательного рассмотрения мы решили сворачивать свои собственные с помощью CruiseControl, NAnt, MSBuild и MSDeploy.

Эта статья содержит отличную информацию: Интеграция MSBuild с CruiseControl.NET

Вот примерно, как работает наше решение:

  • Разработчики создают «отладочную» версию приложения и запускают модульные тесты, а затем регистрируются в SVN.
  • CruiseControl видит обновления и вызывает наш скрипт сборки …
    • Выполняет любые новые миграции в базе данных сборки
    • Заменяет конфигурационные файлы конфигурацией сервера сборки
    • Создает «отладочную» конфигурацию приложения
    • Выполняет все тесты модуляции и интеграции
    • Создает конфигурацию приложения «развернуть» приложения
      • Версии DLL с текущей версией майора / младшей версии и SVN, например, 1.2.0.423
      • Перемещает эту новую сборку в папку «release» на нашем сервере сборки.
      • Удаляет ненужные файлы
    • Обновляет IIS на сервере сборки, если требуется

Затем, когда мы проверили, что все готово к тому, чтобы жить, мы запускаем другой скрипт:

  • Выполнять миграцию на реальном / промежуточном сервере
  • MSDeploy: архив текущего живого / промежуточного сайта
  • MSDeploy: синхронизировать сайт из сборки в живую / промежуточную

На этот этап это было не очень хорошо, но сейчас он работает как шарм: D

Я собираюсь попытаться сохранить этот ответ обновленным, когда мы вносим изменения в наш процесс, поскольку, похоже, сейчас существует несколько подобных вопросов по SA.

Я использовал Visual Build Pro в течение многих лет, он довольно гладкий и простой в использовании и имеет множество стандартных операций (таких, как вы упомянули).

Я использую Puppet , Makefiles для создания RPM и Bamboo, чтобы сделать это для меня. Моя система напрямую не применяется, и я не знаком с миром Windows, но есть некоторые переносимые шаблоны.

Моя настройка позволяет мне создавать RPM для всего (php libs, php-сайты, perl-модули, C-приложения и т. Д.), Которые составляют мое приложение. Это можно вызвать вручную или через Bamboo. Я передаю эти RPM в yum repo и марионетки, чтобы убедиться, что последние (или правильные) версии программного обеспечения установлены в кластере.

Можете ли вы автоматизировать создание пакетов программного обеспечения в MSI? Я думаю, что Puppet может управлять установкой программных пакетов и версий в Windows.

Для этого я использую msdeploy. Он работает отлично.

Об Ant; для платформы .NET у нас есть NAnt, и вы можете использовать его в сочетании с MSDeploy; у вас есть возможность вызвать MSDeploy из вашего Nant-скрипта.

Отредактировано: просто чтобы все было ясно; вы можете делать все с помощью msdeploy. Использование Нанта не является обязательным требованием.

Вместо использования xcopy нам удалось использовать команду -source: dirpath с адресами UNC на серверы с msdeploy. Ключом был ignoreAcls = true и удаление вызовов имени пользователя и пароля в строке msdeploy:

 msdeploy -verb:sync -source:dirpath=\\build\e$\app -dest:dirpath=\\live\d$\app,ignoreAcls=true 

В этом примере развертывается сайт с диска E нашего сервера сборки на диске D на нашем реальном сервере. Существуют некоторые соображения безопасности при экспонировании общих ресурсов или на этом уровне доступа к диску на реальном сервере. В настоящее время мы изучаем использование общей папки с ограниченным доступом.

Затем мы передаем этот вывод в файл журнала, который затем переводится в резервный архив для справки. Файл журнала записывает файлы, которые были перемещены, и когда. Продолжая приведенный выше пример с помощью команды output pipe:

 ... > E:\archive\msdeploy.log 

Никто не упомянул Final Builder http://www.finalbuilder.com . Его наравне с Visual Build Pro. Хороший графический интерфейс для создания автоматических линий развертывания развертывания

Ткань . Кажется маленьким, простым, процедурным. Написано в Python, так как Ruby – нет-нет (почему?).

Проверьте Factory Factory (от индиго розы). Это довольно здорово в том, что он может сделать. Он использует API-интерфейс установщика Windows. Вероятно, он может делать то, что вам нужно.

Единственная причина, по которой Нант должен существовать, состоит в том, что у вас есть структура, подобная Ant, в которой мы можем писать задачи с использованием набора языков .NET. Если вы не хотите, чтобы чистый .NET-разработчик писал пользовательские задачи, я не вижу причин, по которым вы не можете использовать Ant. Просто потому, что вы пишете свое приложение на языке .NET, не означает, что вам нужно использовать инструмент построения .NET.