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


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

Джейсон Ли

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

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

  • Вы можете напрямую использовать программу командной строки 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:</pass/word>]
                          [/L]
                          [/G:<true | false>]
                          [Additional MSDeploy.exe flags]

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

Флаг Description
/T Вызывает MSDeploy.exe с флагом -whatif , который указывает на пробную версию. Вместо развертывания пакета он создает отчет о том, что произойдет, если вы развернули пакет.
/Y Вызывает MSDeploy.exe без флага Whatif . При этом пакет развертывается на локальном компьютере или указанном целевом сервере.
/M Указывает имя целевого сервера или 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 с помощью маркера доступа

MSDeploy V3 поддерживает проверку подлинности с помощью маркера доступа, также известного как маркер носителя. Рекомендуется использовать маркеры доступа, так как они являются наиболее безопасными.

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

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

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

  4. Если у вас нет маркера доступа, создайте его с помощью команды:

    az account get-access-token --query accessToken

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

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

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

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

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

Предупреждение

Обычная проверка подлинности не рекомендуется, если доступны более безопасные методы (маркер носителя).

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

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

  3. Откройте окно командной строки и перейдите к расположению MSDeploy.exe. Обычно это происходит в %PROGRAMFILES%\IIS\Microsoft Web Deploy {version}\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 "double-hop". Необходимо либо использовать учетные данные SQL Server в строка подключения развертывания, либо предоставить базовые учетные данные проверки подлинности в Веб-развертывании. Эта проблема подробно описана в развертывании баз данных членства в корпоративных средах.

Заключение

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

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

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