Поделиться через


Развертывание веб-пакетов

Джейсон Ли

В этом разделе описывается, как опубликовать пакеты веб-развертывания на удаленном сервере с помощью средства веб-развертывания служб IIS 2.0.

Существует два main способа развертывания веб-пакета на удаленном сервере.

  • Вы можете напрямую использовать программу командной строки MSDeploy.exe.
  • Вы можете запустить файл [имя проекта].deploy.cmd , создаваемый процессом сборки.

Конечный результат будет одинаковым независимо от того, какой подход вы используете. По сути, все, что делает файл .deploy.cmd , заключается в запуске MSDeploy.exe с некоторыми предопределенными значениями, чтобы не предоставлять столько сведений, чтобы развернуть пакет. Это упрощает процесс развертывания. С другой стороны, использование MSDeploy.exe напрямую дает гораздо больше гибкости по сравнению с тем, как именно развертывается пакет.

Используемый подход будет зависеть от различных факторов, в том числе от того, какой контроль требуется для процесса развертывания, а также от того, нацеливайтесь ли вы на службу удаленного агента веб-развертывания или обработчик веб-развертывания. В этом разделе объясняется, как использовать каждый подход, и определяется, когда каждый из них подходит.

В задачах и пошаговых руководствах в этом разделе предполагается, что:

Запуск файла [имя проекта].deploy.cmd — самый простой способ развертывания веб-пакета. В частности, использование файла .deploy.cmd обеспечивает следующие преимущества по сравнению с использованием MSDeploy.exe напрямую:

  • Вам не нужно указывать расположение пакета веб-развертывания— файл .deploy.cmd уже знает, где он находится.
  • Вам не нужно указывать расположение SetParameters.xml файла — файл .deploy.cmd уже знает, где он находится.
  • Вам не нужно указывать исходный и целевой поставщик MSDeploy— файл .deploy.cmd уже знает, какие значения следует использовать.
  • Вам не нужно указывать параметры операции MSDeploy— файл .deploy.cmd автоматически добавляет в команду MSDeploy.exe часто необходимые значения.

Прежде чем использовать файл .deploy.cmd для развертывания веб-пакета, убедитесь, что:

  • Файл .deploy.cmd , [имя проекта]. SetParameters.xml файл и веб-пакет ([имя проекта].zip) находятся в той же папке.
  • Веб-развертывание (MSDeploy.exe) устанавливается на компьютере, на котором выполняется файл .deploy.cmd .

Файл .deploy.cmd поддерживает различные параметры командной строки. При запуске файла из командной строки используется следующий базовый синтаксис:

[project name].deploy.cmd [/T | /Y]
                          [/M:<computer name>]
                          [/A:<Basic | NTLM>]
                          [/U:<user name>]
                          [/P:<password>]
                          [/L]
                          [/G:<true | false>]
                          [Additional MSDeploy.exe flags]

Необходимо указать либо флаг /T , либо флаг /Y , чтобы указать, требуется ли выполнение пробной версии или динамическое развертывание соответственно (не используйте оба флага в одной команде). В этой таблице объясняется назначение каждого из этих флагов.

Flag Описание
/T Вызовы MSDeploy.exe с флагом –whatif , который указывает на запуск пробной версии. Вместо развертывания пакета создается отчет о том, что произойдет при развертывании пакета.
/Y Вызовы MSDeploy.exe без флага –whatif . При этом пакет развертывается на локальном компьютере или на указанном целевом сервере.
Указывает имя целевого сервера или URL-адрес службы. Дополнительные сведения о значениях, которые можно предоставить здесь, см. в разделе Рекомендации по конечным точкам этой статьи . Если опустить флаг /M , пакет будет развернут на локальном компьютере.
/A Указывает тип проверки подлинности, который MSDeploy.exe должны использовать для выполнения развертывания. Возможные значения : NTLM и Basic. Если опустить флаг /A , для типа проверки подлинности по умолчанию используется NTLM для развертывания в службе удаленного агента веб-развертывания и в базовом для развертывания в обработчике веб-развертывания.
/U Указывает имя пользователя. Это применимо, только если вы используете обычную проверку подлинности.
/P Задает пароль. Это применимо, только если вы используете обычную проверку подлинности.
/L Указывает, что пакет должен быть развернут в локальном экземпляре IIS Express.
/G Указывает, что пакет развертывается с помощью параметра поставщика tempAgent. Если опустить флаг /G , значение по умолчанию будет равно false.

Примечание

Каждый раз, когда процесс сборки создает веб-пакет, он также создает файл с именем [имя проекта].deploy-readme.txt с описанием этих вариантов развертывания.

В дополнение к этим флагам можно указать параметры операции веб-развертывания в качестве дополнительных параметров .deploy.cmd . Все дополнительные параметры, указанные вами, просто передаются в базовую команду MSDeploy.exe. Дополнительные сведения об этих параметрах см. в разделе Параметры операции веб-развертывания.

Предположим, вы хотите развернуть проект веб-приложения ContactManager.Mvc в тестовой среде, запустив файл .deploy.cmd . Тестовая среда настроена для использования службы удаленного веб-развертывания, как описано в разделе Настройка веб-сервера для публикации веб-развертывания (удаленный агент). Чтобы развернуть веб-приложение, необходимо выполнить следующие действия.

Развертывание веб-приложения с помощью файла .deploy.cmd

  1. Создайте и упакуйте проект веб-приложения, как описано в разделе Создание и упаковка проектов веб-приложений.

  2. Измените файл ContactManager.Mvc.SetParameters.xml , чтобы он содержал правильные значения параметров для тестовой среды, как описано в разделе Настройка параметров для развертывания веб-пакетов.

  3. Откройте окно командной строки и перейдите к расположению файла ContactManager.Mvc.deploy.cmd .

  4. Введите эту команду и нажмите клавишу ВВОД:

    ContactManager.Mvc.deploy.cmd /Y /M:TESTWEB1 /A:NTLM
    

В этом примере:

  • Флаг /Y указывает, что вы хотите развернуть пакет, а не выполнять пробную версию.
  • Флаг /M указывает, что вы хотите развернуть пакет на сервере с именем TESTWEB1. Из этого значения MSDeploy.exe попытается развернуть пакет в службе веб-развертывания удаленного агента по адресу http://TESTWEB1/MSDeployAgentService.
  • Флаг /A указывает, что вы хотите использовать проверку подлинности NTLM. Таким образом, вам не нужно указывать имя пользователя и пароль.

Чтобы продемонстрировать, как использование файла .deploy.cmd упрощает процесс развертывания, ознакомьтесь с командой MSDeploy.exe, которая создается и выполняется при запуске ContactManager.Mvc.deploy.cmd с помощью параметров, показанных выше.

msdeploy.exe 
-source:package='C:\Users\matt.FABRIKAM\Desktop\ContactManager-03\ContactManager\
 Publish\Out\_PublishedWebsites\ContactManager.Mvc_Package\ContactManager.Mvc.zip' -dest:auto,computerName='TESTWEB1.fabrikam.net', authtype='NTLM',
 includeAcls='False' 
-verb:sync 
-disableLink:AppPoolExtension 
-disableLink:ContentExtension 
-disableLink:CertificateExtension 
-setParamFile:"C:\Users\matt.FABRIKAM\Desktop\ContactManager-03\ContactManager\
 Publish\Out\_PublishedWebsites\ContactManager.Mvc_Package\
 ContactManager.Mvc.SetParameters.xml"

Дополнительные сведения об использовании файла .deploy.cmd для развертывания веб-пакета см. в разделе Практическое руководство. Установка пакета развертывания с помощью файла deploy.cmd.

Использование MSDeploy.exe

Хотя использование файла .deploy.cmd обычно упрощает процесс развертывания, в некоторых ситуациях предпочтительнее использовать MSDeploy.exe напрямую. Пример:

  • Если вы хотите выполнить развертывание в обработчике веб-развертывания в качестве пользователя, не являющегося администратором, нельзя использовать файл .deploy.cmd . Это связано с ошибкой в веб-развертывании 2.0, как описано в разделе Рекомендации по конечным точкам.
  • Если вы хотите вручную переключаться между разными SetParameters.xml файлами в разных расположениях, вы можете использовать MSDeploy.exe напрямую.
  • Если вы хотите переопределить несколько MSDeploy.exe аргументов командной строки, можно использовать MSDeploy.exe напрямую.

При использовании MSDeploy.exe необходимо предоставить три основных элемента информации:

  • Параметр –source , указывающий, откуда поступают данные.
  • Параметр –dest , указывающий, куда будут отправляться данные.
  • Параметр –verb , указывающий операцию , которую вы хотите выполнить.

MSDeploy.exe использует поставщики веб-развертывания для обработки исходных и целевых данных. Веб-развертывание включает множество поставщиков, представляющих диапазон приложений и источников данных, с которыми она может работать. Например, существуют поставщики для SQL Server баз данных, веб-серверов IIS, сертификатов, сборок глобального кэша сборок (GAC), различных файлов конфигурации и большого количества других типов данных. И параметр –source , и параметр –dest должны указывать поставщика в форме –source:[providerName]=[location]. При развертывании веб-пакета на веб-сайте IIS следует использовать следующие значения:

  • Поставщик -source всегда является пакетом. Пример:

    -source:package='[path to web package]'
    
  • Поставщик -dest всегда является автоматическим. Например:

    -dest:auto='[server name or service URL]'
    
  • Команда –глагол всегда синхронизируется.

    -verb:sync
    

Кроме того, необходимо указать другие параметры для конкретного поставщика и общие параметры операций. Например, предположим, что вы хотите развернуть веб-приложение ContactManager.Mvc в промежуточной среде. Развертывание будет предназначено для обработчика веб-развертывания и должно использовать обычную проверку подлинности. Чтобы развернуть веб-приложение, необходимо выполнить следующие действия.

Развертывание веб-приложения с помощью MSDeploy.exe

  1. Выполните сборку и упаковку проекта веб-приложения, как описано в разделе Создание и упаковка проектов веб-приложений.

  2. Измените файл ContactManager.Mvc.SetParameters.xml , чтобы он содержал правильные значения параметров для промежуточной среды, как описано в разделе Настройка параметров для развертывания веб-пакетов.

  3. Откройте окно командной строки и перейдите к расположению MSDeploy.exe. Обычно это %PROGRAMFILES%\IIS\Microsoft Web Deploy V2\msdeploy.exe.

  4. Введите эту команду и нажмите клавишу ВВОД (не учитывая разрывы строк):

    MSDeploy.exe
      -source:package="[path]\ContactManager.Mvc.zip"
      -dest:auto,
            computerName="https://stageweb1:8172/MSDeploy.axd?site=DemoSite",
            username="FABRIKAM\stagingdeployer",
            $CREDENTIAL_PLACEHOLDER$,
            authtype="Basic",
            includeAcls="False"
      -verb:sync
      -disableLink:AppPoolExtension
      -disableLink:ContentExtension
      -disableLink:CertificateExtension
      -setParamFile:"[path]\ContactManager.Mvc.SetParameters.xml"
      -allowUntrusted
    

В этом примере:

  • Параметр –source указывает поставщика пакета и расположение веб-пакета.
  • Параметр –dest указывает поставщика авто . Параметр computerName предоставляет URL-адрес службы обработчика веб-развертывания на целевом сервере. Параметр проверки подлинности указывает, что вы хотите использовать обычную проверку подлинности и поэтому необходимо указать имя пользователя и пароль. Наконец, параметр includeAcls="False" указывает, что вы не хотите копировать списки управления доступом (ACL) файлов в исходном веб-приложении на целевой сервер.
  • Аргумент –verb:sync указывает, что необходимо реплицировать исходное содержимое на целевом сервере.
  • Аргументы –disableLink указывают на то, что вы не хотите реплицировать пулы приложений, конфигурацию виртуального каталога или SSL-сертификаты на целевом сервере. Дополнительные сведения см. в разделе Расширения ссылок для веб-развертывания.
  • Параметр –setParamFile предоставляет расположение файлаSetParameters.xml .
  • Параметр –allowUntrusted указывает, что веб-развертывание должно принимать SSL-сертификаты, которые не были выданы доверенным центром сертификации. Если вы выполняете развертывание в обработчике веб-развертывания и используете самозаверяющий сертификат для защиты URL-адреса службы, необходимо включить этот параметр.

Автоматизация развертывания веб-пакетов

Во многих корпоративных сценариях вам потребуется развернуть веб-пакеты в рамках более крупного одношагового или автоматического развертывания. Независимо от того, решили ли вы развернуть веб-пакеты, запустив файл .deploy.cmd или используя MSDeploy.exe напрямую, вы можете параметризовать команды и вызвать их из целевого объекта в файле проекта Microsoft Build Engine (MSBuild).

В примере решения Диспетчера контактов просмотрите целевой объект PublishWebPackages в файле Publish.proj . Этот целевой объект запускается один раз для каждого файла .deploy.cmd , определяемого списком элементов с именем PublishPackages. Целевой объект использует свойства и метаданные элемента для создания полного набора значений аргументов для каждого файла .deploy.cmd , а затем использует задачу Exec для выполнения команды.

<Target Name="PublishWebPackages" Outputs="%(PublishPackages.Identity)">
  ...
  <PropertyGroup>
    <_WhatIfSwitch>/Y</_WhatIfSwitch>
    <_WhatIfSwitch Condition=" '$(_WhatIf)'=='true' ">/T</_WhatIfSwitch>
    <_Cmd>
      %(PublishPackages.FullPath) $(_WhatifSwitch) /M:$(MSDeployComputerName) 
      /U:$(MSDeployUsername) /P:$(Password) /A:$(MSDeployAuth) 
      %(PublishPackages.AdditionalMSDeployParameters)
    </_Cmd>
  </PropertyGroup>
  <Exec Command="$(_Cmd)"/>
</Target>

Примечание

Более широкий обзор модели файлов проекта в примере решения и общие сведения о файлах пользовательских проектов см. в разделах Общие сведения о файле проекта и Общие сведения о процессе сборки.

Рекомендации по конечным точкам

Независимо от того, развертывается ли веб-пакет с помощью файла .deploy.cmd или с помощью MSDeploy.exe напрямую, необходимо указать имя компьютера или конечную точку службы для развертывания.

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

http://[server name]/MSDeployAgentService

Кроме того, можно указать только имя сервера в качестве назначения, и веб-развертывание выдаст URL-адрес службы удаленного агента.

[server name]

Если целевой веб-сервер настроен для развертывания с помощью обработчика веб-развертывания, необходимо указать адрес конечной точки службы веб-управления IIS (WMSvc) в качестве назначения. По умолчанию это имеет следующий вид:

https://[server name]:8172/MSDeploy.axd

Вы можете выбрать любую из этих конечных точек с помощью файла .deploy.cmd или MSDeploy.exe напрямую. Однако если вы хотите выполнить развертывание в обработчике веб-развертывания в качестве пользователя без прав администратора, как описано в разделе Настройка веб-сервера для публикации веб-развертывания (обработчик веб-развертывания), необходимо добавить строку запроса к адресу конечной точки службы.

https://[server name]:8172/MSDeploy.axd?site=[IIS website name]

Это связано с тем, что пользователь, не являющийся администратором, не имеет доступа к СЛУЖБАм IIS на уровне сервера. он или она имеет доступ только к определенному веб-сайту IIS. На момент написания статьи из-за ошибки в конвейере веб-публикации (WPP) невозможно запустить файл .deploy.cmd , используя адрес конечной точки, содержащий строку запроса. В этом сценарии необходимо развернуть веб-пакет с помощью MSDeploy.exe напрямую.

Примечание

Дополнительные сведения о службе удаленного агента веб-развертывания и обработчике веб-развертывания см. в разделе Выбор правильного подхода к веб-развертыванию. Инструкции по настройке файлов проекта для конкретной среды для развертывания в этих конечных точках см. в разделе Настройка свойств развертывания для целевой среды.

Вопросы, касающиеся проверки подлинности

Независимо от того, развертывается ли веб-пакет с помощью файла .deploy.cmd или с помощью MSDeploy.exe напрямую, необходимо указать тип проверки подлинности. Веб-развертывание принимает два возможных значения: NTLM или Basic. Если вы указываете обычную проверку подлинности, необходимо также указать имя пользователя и пароль. При выборе типа проверки подлинности необходимо учитывать различные факторы.

  • При развертывании в службе удаленного агента веб-развертывания необходимо использовать проверку подлинности NTLM. Служба удаленного агента не принимает учетные данные обычной проверки подлинности.
  • При развертывании в обработчике веб-развертывания можно использовать ntlm или обычную проверку подлинности. По умолчанию используется обычная проверка подлинности. Хотя обычная проверка подлинности зависит от имен пользователей и паролей, передаваемых в виде обычного текста, ваши учетные данные защищены, так как обработчик веб-развертывания всегда использует шифрование SSL.
  • Если веб-пакет содержит базу данных, а веб-сервер и сервер базы данных являются отдельными компьютерами, вы не сможете развернуть базу данных с помощью проверки подлинности NTLM из-за ограничения двойного прыжка NTLM. Необходимо либо использовать учетные данные SQL Server в строке подключения развертывания, либо предоставить учетные данные базовой проверки подлинности для веб-развертывания. Эта проблема подробно описана в статье Развертывание баз данных членства в корпоративных средах.

Заключение

В этом разделе описывается, как можно развернуть веб-пакет, запустив файл .deploy.cmd или используя MSDeploy.exe напрямую. В нем объясняется, когда каждый подход может быть уместным, а также описано, как параметризовать и выполнить команду развертывания в рамках более крупного одношагового или автоматизированного процесса сборки.

Дополнительные материалы

Инструкции по созданию и параметризации пакета веб-развертывания см. в разделах Создание и упаковка проектов веб-приложений и Настройка параметров для развертывания веб-пакетов. Инструкции по созданию и развертыванию веб-пакетов из экземпляра Team Foundation Server (TFS) см. в разделе Настройка Team Foundation Server для автоматического веб-развертывания. Сведения о настройке и устранении неполадок процесса развертывания см. в разделе Исключение файлов и папок из развертывания.