Автоматизировать развертывание для веб-приложений?
Моя команда в настоящее время пытается автоматизировать развертывание наших веб-приложений .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, если это возможно.
Есть ли другие инструменты развертывания, которые помогут нам?
Ответы
Ответ 1
Спасибо всем за ваши добрые предложения. Мы проверили их все, но после тщательного рассмотрения мы решили сворачивать самостоятельно с помощью комбинации CruiseControl, NAnt, MSBuild и MSDeploy.
В этой статье представлена отличная информация:
Интеграция MSBuild с CruiseControl.NET
Здесь примерно как работает наше решение:
- Разработчики строят "отладочную" версию приложения и запускают модульные тесты, а затем регистрируются в SVN.
- CruiseControl видит обновления и называет нашу сборку script...
- Запускает любые новые миграции в базе данных сборки
- Заменяет конфигурационные файлы конфигурацией сервера сборки
- Создает конфигурацию "отладки" приложения
- Запускает все тесты модуляции и интеграции
- Создает конфигурацию приложения "развернуть" приложения
- Версии DLL с текущей версией майора/младшей версии и SVN, например. 1.2.0.423
- Переводит эту новую сборку в папку "release" на нашем сервере сборки
- Удаляет ненужные файлы
- Обновления IIS на сервере сборки, если требуется
Затем, когда мы проверили, все готово для того, чтобы перейти к live/staging, мы запускаем еще один script для:
- Выполнить миграцию на реальном/промежуточном сервере
- MSDeploy: архивировать текущий сайт live/stage.
- MSDeploy: синхронизировать сайт из сборки в live/staging.
На этот этап это было не очень хорошо, но теперь он в основном работает как шарм: D
Я собираюсь попытаться сохранить этот ответ обновленным, поскольку мы вносим изменения в наш процесс, поскольку, похоже, сейчас существует несколько похожих вопросов по SA.
Ответ 2
Я использовал Visual Build Pro в течение многих лет, он довольно гладкий и простой в использовании и имеет множество стандартных операций (например, те, которые вы упомянули).
Ответ 3
Я использую Puppet, Makefiles для создания RPM и Bamboo, чтобы сделать это для меня. Моя система напрямую не применяется, и я не знаком с миром Windows, но есть некоторые переносимые шаблоны.
Моя настройка make позволяет мне создавать RPM для всего (php libs, php websites, perl modules, C apps и т.д.), которые составляют мое приложение. Это можно вызвать вручную или через Bamboo. Я передаю эти RPM в yum repo и марионетки, убедившись, что в кластере установлены последние (или правильные) версии программного обеспечения.
Можете ли вы автоматизировать сборку пакетов программного обеспечения в MSI? Я думаю, что Puppet может управлять установкой пакетов и версий программного обеспечения в Windows.
Ответ 4
Я использую msdeploy для этого. Он работает отлично.
О Ant; для платформы .NET у нас есть NAnt, и вы можете использовать его в сочетании с MSDeploy; у вас есть возможность вызывать MSDeploy с вашего Nant- script.
Отредактировано:
Просто чтобы все было ясно; вы можете делать все с помощью msdeploy. Использование Нанта не является обязательным требованием.
Ответ 5
Вместо использования 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 на нашем реальном сервере. Существуют некоторые соображения безопасности при экспонировании общих ресурсов или на этом уровне доступа к диску на реальном сервере. В настоящее время мы изучаем использование общей папки с ограниченным доступом.
Затем мы передаем этот вывод в файл журнала, который затем переводится в резервный архив для справки. Файл журнала записывает файлы, которые были перемещены, и когда. Продолжая приведенный выше пример с командой выходного канала:
... > E:\archive\msdeploy.log
Ответ 6
Никто не упоминал Final Builder http://www.finalbuilder.com. Его наравне с Visual Build Pro. Хороший графический интерфейс для создания автоматических развертываний развертывания сборки
Ответ 7
Ткань. Кажется маленьким, простым, процедурным. Написано в Python, так как Ruby - нет-нет (почему?).
Ответ 8
Проверьте Setup Factory (от индиго розы). Он довольно устойчив в том, что он может сделать. Он использует API-интерфейс установщика Windows. Вероятно, он может делать то, что вам нужно.
Ответ 9
Единственная причина, по которой должен существовать Nant, состоит в том, что у вас есть структура, похожая на Ant, в которой мы можем писать задачи с использованием набора языков .NET. Если вы не хотите, чтобы чистый .NET-разработчик писал пользовательские задачи, я не вижу причин, по которым вы не можете использовать Ant. Просто потому, что вы пишете свое приложение на языке .NET, не означает, что вам нужно использовать инструмент сборки .NET.