Настраиваем WebDeploy для развертывания приложений ASP.NET

Рано или поздно возникает необходимость развертывания приложения на сервер. Исторически многие делают это при помощи FTP/SFTP. Однако, этот способ развертывания нельзя назвать удобным. Мало того, что развертывание в этом случае занимает много времени, оно к тому же не является атомарным. Как же быть? Правильный ответ - WebDeploy.

WebDeploy позволяет собирать пакеты и атомарно развертывать их на сервере - из Visual Studio или используя автоматизированные скрипты. Давайте последовательно пройдем шаги по настройке WebDeploy на сервере.

Установка пакета Web Deploy

Для установки потребуется скачать установочный пакет и запустить его на сервере. Альтернативным способом является установка Web Deploy через Web Platform Installer. В последнем случае для установки нужно выбрать пакет Web Deploy 3.5.

Настройка публикации

После успешной установки Web Deploy в консолии IIS должны появится разделы Management Service и Management Service Delegation. Для корректной работы Web Deploy в разделе Management Service следует разрешить удаленные подключения:

Здесь же можно указать SSL-сертификат, если у вас такой имеется.

Если вы все сделали правильно, то в контекстном меню каждого сайта должен появиться пункт меню Deploy:

Необходимо выбрать пункт меню Configure Web Deploy Publishing, чтобы разрешить публикацию для этого сайта, указать имя пользователя, от имени которого будут публиковаться пакеты, URL и нажать кнопку Setup.

Внимание: Важно, чтобы пользователь, которого вы указываете при настройке Web Deploy имел права на запись в папку веб-сайта.

Теперь всё готово для публикации приложения.

Публикация

Публиковать приложение можно двумя способами — напрямую из Visual Studio и используя автоматизированные билд-скрипты.

Для публикации из Visual Studio следует выбрать веб-сайт в Solution Explorer и в контекстом меню выбрать пункт Publish. В появившемся диалоге нужно заполнить требуемые поля и запустить публикацию:

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

Подготовка пакета:

<Target Name="PrepareWebDeployPackage">
  <MSBuild Projects="WebApplication.csproj"
           Targets="Package"
           Properties="PackageLocation=WebApplicationPackage.zip"/>
</Target>

Публикация пакета:

<Target Name="PublishWebDeployPackage">
    <Exec Command="WebDeploy\msdeploy.exe -source:package='WebApplicationPackage.zip' -dest:auto,computerName='..',userName='..',password='..',authtype='NTLM',includeAcls='False' -verb:sync -allowuntrusted -setParam:"IIS Web Application Name"="WebApp1""/>
</Target>

Как видно, при публикации требуется указать адрес для публикации, имя пользователя и пароль, а также имя сайта на сервере.

Разрешение проблем

По опыту могу сказать, что при настройке публикации могут возникать проблемы. Если вы убедились, что файрвол не блокирует ваши подключения и сервис WebDeploy установлен корректно, то можно включить отслеживание запросов и понять в чем причина.