Я ищу различные методы/инструменты, которые вы используете для развертывания проекта веб-приложения ASP.NET( НЕ веб-сайта ASP.NET) для производства?
Мне особенно интересен рабочий процесс, происходящий между тем, как сервер Continuous Integration Build удаляет двоичные файлы в определенном месте и время, когда первый запрос пользователя попадает в эти двоичные файлы.
Используете ли вы некоторые специальные инструменты или просто XCOPY? Как приложение упаковано (ZIP, MSI,...)?
Когда приложение развертывается в первый раз, как настроить пул приложений и виртуальный каталог (вы создаете их вручную или с помощью какого-либо инструмента)?
Когда изменяется статический ресурс (CSS, JS или файл изображения), вы перераспределяете все приложение или только измененный ресурс? Как насчет изменения страницы сборки /ASPX?
Вы отслеживаете все развернутые версии для данного приложения, и в случае, если что-то пойдет не так, есть ли у вас процедуры восстановления приложения в предыдущем известном рабочем состоянии?
Не заполняйте предыдущий список.
И вот что мы используем для развертывания наших приложений ASP.NET:
У нас есть весь наш код, развернутый в MSI, с помощью Setup Factory. Если что-то нужно изменить, мы передислоцируем все решение. Это звучит как излишний для файла css, но он абсолютно синхронизирует все среды, и мы точно знаем, что находится в производстве (мы развертываем все тестовые и uat-среды одинаково).
Мы развертываем развертывание на живых серверах, поэтому мы не используем проекты установщика; у нас есть нечто большее, чем CI:
robocopy автоматически обеспечивает развертывание только изменений.
Повторить пул приложений и т.д.; Я бы любил, чтобы это автоматизировалось (см. Этот вопрос), но на данный момент это руководство. Я действительно хочу изменить это.
(вероятно, это помогает нам иметь собственный центр обработки данных и серверную ферму "на месте", поэтому нам не нужно пересекать многие препятствия)
approved
источником? ветви?
Сайт
Deployer: http://www.codeproject.com/KB/install/deployer.aspx
Я публикую сайт в локальной папке, застегиваю его, а затем загружаю через FTP. Затем Deployer на сервере извлекает zip, заменяет значения конфигурации (в Web.Config и другие файлы) и что он.
Конечно, для первого запуска вам нужно подключиться к серверу и настроить IIS WebSite, базу данных, но после этого публикация обновлений является куском торта.
База данных
Для хранения баз данных в синхронизации я использую http://www.red-gate.com/products/sql-development/sql-compare/
Если сервер находится за связкой маршрутизаторов, и вы не можете напрямую подключиться (что является требованием SQL Compare), используйте https://secure.logmein.com/products/hamachi2/ для создать VPN.
Я развертываю в основном приложения ASP.NET на Linux-серверах и перераспределяю все для даже самых маленьких изменений. Вот мой стандартный рабочий процесс:
Checkout выполняется с версией Subversion в командной строке, а построение выполняется с помощью xbuild (msbuild - как в проекте Mono). Большая часть магии выполняется в ReleaseIt.
На моем dev-сервере у меня по существу есть непрерывная интеграция, но на стороне производства я на самом деле SSH на сервер и инициирую развертывание вручную, запустив script. Мой script искусно называется "развернуть" , так что я набираю текст в приглашении bash. Я очень креативен. Нет.
В процессе производства я должен дважды набирать "развернуть" : один раз для регистрации, сборки и развертывания в датированном каталоге и один раз, чтобы сделать этот каталог экземпляром по умолчанию. Поскольку каталоги устарели, я могу вернуться к любому предыдущему развертыванию, просто набрав "развернуть" из соответствующего каталога.
Первоначальное развертывание занимает пару минут, а возврат к предыдущей версии занимает несколько секунд.
Это было приятное решение для меня и полагалось только на три утилит командной строки (svn, xbuild и release), клиент DB, SSH и Bash.
Мне действительно нужно обновить копию ReleaseIt на CodePlex когда-нибудь:
Используете ли вы некоторые специальные инструменты или просто XCOPY? Как приложение упаковано (ZIP, MSI,...)?
Как разработчик для BuildMaster, это, естественно, я использую. Все приложения создаются и упаковываются внутри инструмента как артефакты, которые хранятся внутри файла ZIP.
Когда приложение развертывается в первый раз, как настроить пул приложений и виртуальный каталог (вы создаете их вручную или с помощью какого-либо инструмента)?
Вручную - мы создаем элемент управления изменениями в инструменте, который напоминает нам о точном шаге для выполнения в будущих средах по мере того, как приложение перемещается через среду тестирования. Это также можно автоматизировать с помощью простого PowerShell script, но мы не добавляем новые приложения очень часто, поэтому так же легко потратить 1 минуту, чтобы создать сайт вручную.
Когда изменяется статический ресурс (CSS, JS или файл изображения), вы перераспределяете все приложение или только измененный ресурс? Как изменится страница сборки /ASPX?
По умолчанию процесс развертывания артефактов настроен таким образом, что только файлы, которые были изменены, передаются на целевой сервер - это включает в себя все: от файлов CSS, файлов JavaScript, страниц ASPX и связанных сборок.
Вы отслеживаете все развернутые версии для данного приложения, и в случае, если что-то пойдет не так, есть ли у вас процедуры восстановления приложения в предыдущем известном рабочем состоянии?
Да, BuildMaster обрабатывает все это для нас. Восстановление в основном так же просто, как повторное выполнение старой рекламной кампании, но иногда изменения базы данных необходимо восстановить вручную, и может произойти потеря данных. Основной процесс отката подробно описан здесь: http://inedo.com/support/tutorials/performing-a-deployment-rollback-with-buildmaster
Отвечая на ваши вопросы:
Сохранение этого приятного и простого спасло нас от головных болей до сих пор.
Простой XCopy для ASP.NET. Замените его, sftp на сервер, извлеките в нужное место. Для первого развертывания ручная настройка IIS
Мы улучшаем процесс выпуска в течение прошедшего года, и теперь у нас это получилось. Я использую Jenkins для управления всеми нашими автоматическими сборками и выпусками, но я уверен, что вы можете использовать TeamCity или CruiseControl.
Итак, при проверке наша "нормальная" сборка делает следующее:
<MvcBuildViews>true</MvcBuildViews>
, введенное в мои .csproj файлы для компиляции представлений, msbuild случайно разбился, поэтому мне пришлось отключить его)Если кто-то нажимает "Развернуть на UAT":
Когда мы нажимаем "Развернуть на Prod":
Вся полная сборка для производства занимает около 30 секунд, и я очень, очень доволен.
Переход на это решение:
Основными недостатками этого решения являются:
Мне бы хотелось услышать любые другие возможные улучшения!
Unfold - это решение для развертывания в виде capistrano, которое я написал для приложений .net. Это то, что мы используем во всех наших проектах, и это очень гибкое решение. Он решает большинство типичных проблем для приложений .net, как описано в этом сообщении в блоге Роба Конье.
Здесь введение и некоторые другие сообщения в блоге.
Итак, чтобы ответить на следующие вопросы:
Как упаковано приложение (ZIP, MSI,...)?
Git (или другой scm) является способом по умолчанию для получения приложения на целевой машине. В качестве альтернативы вы можете выполнить локальную сборку и скопировать результат по удаленному соединению Powereshell
Когда приложение развертывается в первый раз, как вы настраиваете пул приложений и виртуальный каталог (вы создаете их вручную или с помощью какого-либо инструмента)?
Unfold настраивает пул приложений и веб-приложение с помощью модуля веб-администрирования Powershell. Это позволяет нам (и вам) изменять любой аспект пула приложений или веб-сайта
Когда изменяется статический ресурс (CSS, JS или файл изображения), вы перераспределяете все приложение или только измененный ресурс? Как изменится страница сборки /ASPX?
Да, разворачивается, любое развертывание устанавливается рядом с другими. Таким образом, мы можем легко откат когда что-то не так. Это также позволяет нам легко отследить развернутую версию до ревизия управления версиями.
Вы отслеживаете все развернутые версии для данного приложения?
Да, разворачивает старые версии. Не все версии, но несколько версий. Это делает откат почти тривиальным.
веб-установки/установки проектов - так что вы можете легко удалить его, если что-то пойдет не так.
В 2009 году, когда этот ответ получился, мы использовали CruiseControl.net для наших сборников непрерывной интеграции, которые также выдавали Release Media.
Оттуда мы использовали "Программное обеспечение Smart Sync" для сравнения с производственным сервером, который вышел из сбалансированного баланса нагрузки, и переместил изменения вверх.
Наконец, после проверки релиза мы запустили DOS script, который в первую очередь использовал RoboCopy для синхронизации кода с серверами live, останавливая/запуская IIS по мере его появления.
Я бы рекомендовал не просто перезаписывать существующие файлы приложений, а вместо этого создавать каталог для каждой версии и переназначать приложение IIS на новый путь. Это имеет несколько преимуществ:
Единственная проблема, с которой мы столкнулись, - это кэширование ресурсов, если вы не перезапускаете пул приложений и не полагаетесь на автоматический переключатель appdomain.
В последней компании, с которой я работал, мы использовали для развертывания с использованием пакетного файла rSync для загрузки только изменений со времени последней загрузки. Красота rSync заключается в том, что вы можете добавлять списки исключений для исключения определенных файлов или шаблонов имен файлов. Таким образом, исключая все наши файлы .cs, файлы решений и проектов, например, очень просто.
Мы использовали TortoiseSVN для управления версиями, и поэтому было приятно иметь возможность писать в нескольких командах SVN, чтобы выполнить следующее:
В дополнение к этому есть второй командный файл, который просто проверяет различия файлов на реальном сервере. Это может указывать на общую проблему, когда кто-то будет загружать, но не вносить изменения в SVN. В сочетании с журналом синхронизации, упомянутым выше, мы могли бы выяснить, кто был виновным, и попросить их совершить свою работу.
И наконец, rSync позволяет вам делать резервную копию файлов, которые были заменены во время загрузки. Мы переместили их в резервную папку. Итак, если вы вдруг поняли, что некоторые из файлов не должны быть перезаписаны, вы можете найти последнюю резервную копию всех файлов в этой папке.
В то время как решение оказалось немного неуклюжим в то время, когда я с тех пор стал ценить его гораздо больше, работая в средах, где метод загрузки намного менее изящный или простой (удаленный рабочий стол, копирование и вставка всего сайта, например).