Развертывание веб-пакетов
В этом разделе описывается, как опубликовать пакеты веб-развертывания на удаленном сервере с помощью средства веб-развертывания служб IIS 2.0.
Существует два main способа развертывания веб-пакета на удаленном сервере.
- Вы можете напрямую использовать программу командной строки MSDeploy.exe.
- Вы можете запустить файл [имя проекта].deploy.cmd , создаваемый процессом сборки.
Конечный результат будет одинаковым независимо от того, какой подход вы используете. По сути, все, что делает файл .deploy.cmd , заключается в запуске MSDeploy.exe с некоторыми предопределенными значениями, чтобы не предоставлять столько сведений, чтобы развернуть пакет. Это упрощает процесс развертывания. С другой стороны, использование MSDeploy.exe напрямую дает гораздо больше гибкости по сравнению с тем, как именно развертывается пакет.
Используемый подход будет зависеть от различных факторов, в том числе от того, какой контроль требуется для процесса развертывания, а также от того, нацеливайтесь ли вы на службу удаленного агента веб-развертывания или обработчик веб-развертывания. В этом разделе объясняется, как использовать каждый подход, и определяется, когда каждый из них подходит.
В задачах и пошаговых руководствах в этом разделе предполагается, что:
- Вы создали и упаковали веб-приложение, как описано в разделе Создание и упаковка проектов веб-приложений.
- Вы изменили файл SetParameters.xml , чтобы предоставить правильные значения параметров для целевой среды, как описано в разделе Настройка параметров для развертывания веб-пакетов.
Запуск файла [имя проекта].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
Создайте и упакуйте проект веб-приложения, как описано в разделе Создание и упаковка проектов веб-приложений.
Измените файл ContactManager.Mvc.SetParameters.xml , чтобы он содержал правильные значения параметров для тестовой среды, как описано в разделе Настройка параметров для развертывания веб-пакетов.
Откройте окно командной строки и перейдите к расположению файла ContactManager.Mvc.deploy.cmd .
Введите эту команду и нажмите клавишу ВВОД:
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
Выполните сборку и упаковку проекта веб-приложения, как описано в разделе Создание и упаковка проектов веб-приложений.
Измените файл ContactManager.Mvc.SetParameters.xml , чтобы он содержал правильные значения параметров для промежуточной среды, как описано в разделе Настройка параметров для развертывания веб-пакетов.
Откройте окно командной строки и перейдите к расположению MSDeploy.exe. Обычно это %PROGRAMFILES%\IIS\Microsoft Web Deploy V2\msdeploy.exe.
Введите эту команду и нажмите клавишу ВВОД (не учитывая разрывы строк):
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 для автоматического веб-развертывания. Сведения о настройке и устранении неполадок процесса развертывания см. в разделе Исключение файлов и папок из развертывания.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по