部署 Web 程序包

作者 :Jason Lee

本主题介绍如何使用 Internet Information Services (IIS) Web 部署工具 (Web 部署) 2.0 将 Web 部署包发布到远程服务器。

可通过两种main方法将 Web 包部署到远程服务器:

  • 可以直接使用 MSDeploy.exe 命令行实用工具。
  • 可以运行生成过程生成的 [项目名称].deploy.cmd 文件。

无论使用哪种方法,最终结果都是相同的。 实质上, .deploy.cmd 文件执行的所有操作都是使用一些预先确定的值运行MSDeploy.exe,因此无需提供尽可能多的信息即可部署包。 这简化了部署过程。 另一方面,使用 MSDeploy.exe 直接使你更灵活地准确部署包。

使用哪种方法将取决于多种因素,包括对部署过程需要多少控制,以及是面向 Web 部署远程代理服务还是 Web 部署处理程序。 本主题说明如何使用每种方法,并确定每种方法何时适用。

本主题中的任务和演练假定:

运行 [项目名称].deploy.cmd 文件是部署 Web 包的最简单方法。 具体而言,使用 .deploy.cmd 文件比直接使用 MSDeploy.exe 具有以下优势:

  • 无需指定 Web 部署包的位置- .deploy.cmd 文件已知道它的位置。
  • 无需指定 SetParameters.xml 文件的位置- .deploy.cmd 文件已经知道它的位置。
  • 无需指定源和目标 MSDeploy 提供程序- .deploy.cmd 文件已知道要使用哪些值。
  • 无需指定 MSDeploy 操作设置, .deploy.cmd 文件会自动将常用所需的值添加到 MSDeploy.exe 命令。

在使用 .deploy.cmd 文件部署 Web 包之前,应确保:

  • .deploy.cmd 文件,[项目名称]。SetParameters.xml 文件和 Web 包 ([项目名称]。zip) 位于同一文件夹中。
  • Web 部署 (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 标志,以指示是分别执行试用运行还是实时部署, (不要在同一命令) 同时使用这两个标志。 此表说明了每个标志的用途。

标志 描述
/T 使用 –whatif 标志调用MSDeploy.exe,该标志指示试用版运行。 它不是部署包,而是创建一个报告,说明如果部署了包,会发生什么情况。
/Y 在没有 –whatif 标志的情况下调用MSDeploy.exe。 这会将包部署到本地计算机或指定的目标服务器。
/M 指定目标服务器名称或服务 URL。 有关可在此处提供的值的详细信息,请参阅本主题中的 终结点注意事项 部分。 如果省略 /M 标志,包将部署到本地计算机。
/A 指定MSDeploy.exe用于执行部署的身份验证类型。 可能的值为 NTLMBasic。 如果省略 /A 标志,则身份验证类型默认为 NTLM 以部署到 Web 部署远程代理服务,并默认为 “基本 ”以部署到 Web 部署处理程序。
/U 指定用户名。 仅当你使用基本身份验证时,这才适用。
/P 指定密码。 仅当你使用基本身份验证时,这才适用。
/L 指示应将包部署到本地IIS Express实例。
/G 指定使用 tempAgent 提供程序设置部署包。 如果省略 /G 标志,则该值默认为 false

注意

每次生成过程创建 Web 包时,它还会创建一个名为 [project name].deploy-readme.txt ,用于说明这些部署选项。

除了这些标志,还可以将 Web 部署操作设置指定为其他 .deploy.cmd 参数。 你指定的任何其他设置只需传递到基础MSDeploy.exe命令。 有关这些设置的详细信息,请参阅 Web 部署操作设置

假设你想要通过运行 .deploy.cmd 文件将 ContactManager.Mvc Web 应用程序项目部署到测试环境。 测试环境配置为使用 Web 部署远程代理服务,如 为 Web 部署发布配置 Web 服务器 (远程代理) 中所述。 若要部署 Web 应用程序,需要完成后续步骤。

使用 .deploy.cmd 文件部署 Web 应用程序

  1. 生成和打包 Web 应用程序项目,如 生成和打包 Web 应用程序项目中所述。

  2. 修改 ContactManager.Mvc.SetParameters.xml 文件以包含测试环境的正确参数值,如 为 Web 包部署配置参数中所述。

  3. 打开命令提示符窗口并导航到 ContactManager.Mvc.deploy.cmd 文件的位置。

  4. 键入此命令,然后按 Enter:

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

在本示例中:

  • /Y 标志指示你想要实际部署包,而不是执行试用版运行。
  • /M 标志指示要将包部署到名为 TESTWEB1 的服务器。 从此值,MSDeploy.exe将尝试将包部署到 Web 部署远程代理服务 http://TESTWEB1/MSDeployAgentService.
  • /A 标志指示要使用 NTLM 身份验证。 因此,无需指定用户名和密码。

若要说明使用 .deploy.cmd 文件如何简化部署过程,请查看使用上述选项运行 ContactManager.Mvc.deploy.cmd 时生成和执行的 MSDeploy.exe 命令。

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 文件部署 Web 包的详细信息,请参阅 如何:使用 deploy.cmd 文件安装部署包

使用 MSDeploy.exe

虽然使用 .deploy.cmd 文件通常可简化部署过程,但在某些情况下,最好直接使用 MSDeploy.exe。 例如:

  • 如果要以非管理员用户身份部署到 Web 部署处理程序,则不能使用 .deploy.cmd 文件。 这是由于 Web 部署 2.0 中的 bug 造成的,如 终结点注意事项中所述。
  • 如果要在不同位置的不同 SetParameters.xml 文件之间手动切换,则建议直接使用 MSDeploy.exe。
  • 如果要替代多个MSDeploy.exe命令行参数,则建议直接使用 MSDeploy.exe。

使用MSDeploy.exe时,需要提供三个关键信息:

  • 一个 –source 参数,指示数据的来源。
  • 一个 –dest 参数,指示数据将转到何处。
  • 一个 –verb参数,指示要执行的操作。

MSDeploy.exe依赖于 Web 部署提供程序 来处理源数据和目标数据。 Web 部署包含许多表示其可以使用的应用程序和数据源范围的提供程序,例如,存在用于SQL Server数据库、IIS Web 服务器、证书、全局程序集缓存 (GAC) 程序集、各种不同配置文件和大量其他类型的数据的提供程序。 –source 参数和 –dest 参数必须以 –source:[providerName]=[location] 的形式指定提供程序。 将 Web 包部署到 IIS 网站时,应使用以下值:

  • –source 提供程序始终是。 例如:

    -source:package='[path to web package]'
    
  • –dest 提供程序始终是自动的。例如:

    -dest:auto='[server name or service URL]'
    
  • –verb 始终是同步的。

    -verb:sync
    

此外,还需要指定各种其他 特定于提供程序的设置 和常规 操作设置。 例如,假设你想要将 ContactManager.Mvc Web 应用程序部署到过渡环境。 部署将面向 Web 部署处理程序,必须使用基本身份验证。 若要部署 Web 应用程序,需要完成后续步骤。

使用 MSDeploy.exe部署 Web 应用程序

  1. 生成和打包 Web 应用程序项目,如 生成和打包 Web 应用程序项目中所述。

  2. 修改 ContactManager.Mvc.SetParameters.xml 文件以包含过渡环境的正确参数值,如 为 Web 包部署配置参数中所述。

  3. 打开命令提示符窗口并浏览到MSDeploy.exe的位置。 这通常位于 %PROGRAMFILES%\IIS\Microsoft Web Deploy V2\msdeploy.exe。

  4. 键入此命令,然后按 Enter (忽略换行符) :

    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 参数指定提供程序并指示 Web 包的位置。
  • –dest 参数指定自动提供程序。 computerName 设置在目标服务器上提供 Web 部署处理程序的服务 URL。 authtype 设置指示你想要使用基本身份验证,因此需要提供用户名和密码 最后, includeAcls=“False” 设置指示你不希望将源 Web 应用程序中文件的访问控制列表 (ACL) 复制到目标服务器。
  • –verb:sync 参数指示你想要在目标服务器上复制源内容。
  • –disableLink 参数指示你不希望在目标服务器上复制应用程序池、虚拟目录配置或安全套接字层 (SSL) 证书。 有关详细信息,请参阅 Web 部署链接扩展
  • –setParamFile 参数提供SetParameters.xml文件的位置。
  • –allowUntrusted 开关指示 Web 部署应接受不是由受信任的证书颁发机构颁发的 SSL 证书。 如果要部署到 Web 部署处理程序,并且已使用自签名证书来保护服务 URL,则需要包含此开关。

自动执行 Web 包部署

在很多企业方案中,需要将 Web 包部署为更大的单步部署或自动化部署的一部分。 无论是选择通过运行 .deploy.cmd 文件还是直接使用 MSDeploy.exe 来部署 Web 包,都可以参数化命令,并从Microsoft 生成引擎 (MSBuild) 项目文件中的目标调用它们。

在 Contact Manager 示例解决方案中,查看 Publish.proj 文件中的 PublishWebPackages 目标。 对于由名为 PublishPackages 的项列表标识的每个 .deploy.cmd 文件,此目标运行一次。 目标使用属性和项元数据为每个 .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 来部署 Web 包,都需要为部署指定计算机名称或服务终结点。

如果目标 Web 服务器配置为使用 Web 部署远程代理服务进行部署,请将目标服务 URL 指定为目标。

http://[server name]/MSDeployAgentService

或者,可以单独指定服务器名称作为目标,Web 部署将推断远程代理服务 URL。

[server name]

如果目标 Web 服务器配置为使用 Web 部署处理程序进行部署,则需要将 IIS Web 管理服务 (WMSvc) 的终结点地址指定为目标。 默认情况下,采用以下形式:

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

可以使用 .deploy.cmd 文件或直接MSDeploy.exe以这些终结点为目标。 但是,如果要以非管理员用户身份部署到 Web 部署处理程序,如 配置 Web Server for Web Deploy Publishing (Web Deploy Handler) 中所述,则需要将查询字符串添加到服务终结点地址。

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

这是因为非管理员用户没有 IIS 的服务器级访问权限;他或她只能访问特定的 IIS 网站。 在撰写本文时,由于 Web 发布管道 (WPP) 中的 bug,无法使用包含查询字符串的终结点地址运行 .deploy.cmd 文件。 在这种情况下,需要直接使用 MSDeploy.exe 部署 Web 包。

注意

有关 Web 部署远程代理服务和 Web 部署处理程序的详细信息,请参阅 选择正确的 Web 部署方法。 有关如何配置特定于环境的项目文件以部署到这些终结点的指导,请参阅 配置目标环境的部署属性

身份验证注意事项

无论是通过运行 .deploy.cmd 文件还是直接使用 MSDeploy.exe 部署 Web 包,都需要指定身份验证类型。 Web 部署接受两个可能的值: NTLMBasic。 如果指定基本身份验证,则还需要提供用户名和密码。 选择身份验证类型时,需要注意多种因素:

  • 如果要部署到 Web 部署远程代理服务,则必须使用 NTLM 身份验证。 远程代理服务不接受基本身份验证凭据。
  • 如果要部署到 Web 部署处理程序,可以使用 NTLM 或基本身份验证。 默认设置为基本身份验证。 尽管基本身份验证依赖于以纯文本形式传输的用户名和密码,但凭据会受到保护,因为 Web 部署处理程序始终使用 SSL 加密。
  • 如果 Web 包包含数据库,并且 Web 服务器和数据库服务器是单独的计算机,则由于 NTLM“双跃点”限制,无法使用 NTLM 身份验证部署数据库。 需要在部署连接字符串中使用SQL Server凭据,或者向 Web 部署提供基本身份验证凭据。 将 成员资格数据库部署到企业环境中更详细地描述了此问题。

结论

本主题介绍了如何通过运行 .deploy.cmd 文件或直接使用 MSDeploy.exe 来部署 Web 包。 它说明了每种方法何时适用,并介绍了如何在更大的单步生成或自动生成过程中参数化和运行部署命令。

深入阅读

有关如何创建和参数化 Web 部署包的指导,请参阅 生成和打包 Web 应用程序项目配置 Web 包部署的参数。 有关如何从 Team Foundation Server (TFS) 实例生成和部署 Web 包的指导,请参阅 配置 Team Foundation Server 进行自动 Web 部署。 有关如何自定义部署过程并对其进行故障排除的信息,请参阅 从部署中排除文件和文件夹