将应用程序部署到 Web 场/同步 Web 场中的所有计算机

本示例演示如何编写命令行脚本以在 Web 场方案中执行以下任务:

  1. 将开发人员提供的程序包中的应用程序部署到 Web 场中的多台计算机上。

    在多台计算机上部署新的应用程序包或将应用程序升级到较新的版本将是非常烦琐的任务。 发送该程序包并在远程计算机上执行部署的脚本将简化此任务。

  2. 将 Web 场中所有计算机上的内容和配置同步到一台模型计算机。

    要将多个更改应用于 Web 场,需要采用完全相同的方法将所有更改应用于所有计算机。 如果已对所需的所有更改编写脚本,那么这个任务就比较轻松。 否则会出现如何记录和复制 Web 场中所有计算机上的所有更改这一问题。 另一个解决方案是将所有更改应用于一台计算机,然后在 Web 场中复制该计算机。

本示例介绍如何使用 Web 部署工具 (MSDeploy) 部署应用程序包,或将某台服务器的内容和配置复制到 Web 场中的所有计算机。 本示例适用于任何 MSDeploy 应用程序包。 我们建议使用常见 Windows Server AppFabric 示例应用程序,它是特为 Windows Server AppFabric 示例而创建的。 若要查找此应用程序包,请导航到 <samples>\ Samples\Management\MultiMachineSyncAndDeploy \Code\CalculatorService.zip 文件,其中 <samples> 是安装 AppFabric 示例的路径。 可以轻松修改该脚本以符合特定需求,例如,重命名部署的应用程序或仅同步一个站点。

备注

提供这些示例仅是为了教育目的。 它们不能用于生产环境,并且尚未在生产环境中进行测试。 Microsoft 不对这些示例提供技术支持。

先决条件

本示例需要符合以下要求的两台或多台计算机:

  1. 必须在所有计算机上安装和运行 Web 部署工具的远程代理服务(也称为部署代理服务)。 默认情况下,AppFabric 安装 Web 部署工具,但其远程代理服务并非默认安装的一部分。 向安装中添加远程代理服务:

    1. 打开“程序和功能”控制面板,选择“Web 部署工具”,然后单击“更改”。

    2. 提示时,单击“下一步”,在下面的屏幕上单击“更改”。

    3. 显示功能列表之后,确保“远程代理服务”被标记为“将安装在本地硬盘驱动器上”,然后完成安装向导。

    4. 完成向导之后,通过在命令窗口键入 net start msdepsvc 启动该服务。 如果您希望每次 Windows 启动时自动启动该服务,请在命令窗口中键入 sc config msdepsvc start=auto

    若要了解有关 Web 部署工具的安装和配置的详细信息,或在未安装 AppFabric 的计算机上安装 AppFabric,请参阅 http://learn.iis.net/page.aspx/421/installing-the-web-deployment-tool/

  2. 所有将在同步过程中被修改的计算机必须允许“万维网服务 (HTTP)”通过其防火墙。

  3. Web 场中的所有计算机必须是某个域的一部分,且用于同步场的帐户必须具有对所有计算机的管理权限。

如果使用自定义提供程序,确定远程代理服务是否识别该程序有时非常有用。 有两种方法可确定可用的提供程序。

  1. 使用 IIS - 从 IIS Manager 中,右键单击应用程序,选择“部署”,然后选择“导出应用程序”。 在“导出应用程序”对话框中,单击“管理组件”。 在“提供程序”列,单击最后的空行,然后单击向下箭头。 将显示可用提供程序的列表,包括远程代理服务识别的任何自定义提供程序。

  2. 使用命令行 – 在 Web 部署工具命令行的命令提示符中,输入 MSDEPLOY.EXE。 显示的一部分信息将是可用的自定义提供程序。 有关如何安装 Web 部署工具的信息,请参阅安装 Web 部署工具

可以将示例脚本修改为在非域环境中运行。 若要了解有关 Web 部署工具的身份验证选项的详细信息,请参阅 https://technet.microsoft.com/en-us/library/dd569001(WS.10).aspx 上的 authType 选项。

示例位置和文件

所有需要运行本示例的所有文件均位于 <samples>\Samples\Management\MultiMachineSyncAndDeploy\Code 中:

  • machines.txt

  • sync.cmd

  • syncOne.cmd

  • deployOne.cmd

设置和运行本示例

任务 1: 部署程序包。

  1. 将 <samples>\Samples\Management\SyncConfigFromModelMachine\Code 中的所有文件复制到管理计算机。

  2. 编辑 machines.txt 文件,使其包含场中要以单批次修改的所有其他计算机的名称。 您需要在每行放置一个计算机名称。

  3. 运行 sync.cmd -fromPackage <package file path> 命令。

  4. 检查日志文件,看是否有错误。 每台计算机都将拥有其自身的名为 sync-MACHINE.log 的日志文件,其中 MACHINE 部分被替换为该计算机的名称。

任务 2: 同步到模型计算机。

  1. 场中的所有计算机满足上述要求之后,您可以首先对其中一台计算机进行应用程序或站点配置更改。 我们将该计算机称为“模型计算机”。

  2. 完成配置之后,将 <samples>\Samples\Management\SyncConfigFromModelMachine\Code 中的所有文件复制到模型计算机。

  3. 编辑 machines.txt 文件,使其包含场中要以单批次修改的所有其他计算机的名称。 您需要在每行放置一个计算机名称。

  4. 运行 sync.cmd -fromLocalServer 命令并输入 Y 进行确认。

  5. 检查日志文件,看是否有错误。 每台计算机都将拥有其自身的名为 sync-MACHINE.log 的日志文件,其中 MACHINE 部分被替换为该计算机的名称。

了解本示例

sync.cmd 脚本首先验证用户提供的命令行参数:

if "%1"=="" goto print_syntax
if "%1"=="-fromLocalServer" goto sync_server
if "%1"=="-fromPackage" goto sync_package
goto print_syntax

根据参数,脚本会为 machines.txt 中指定的每台计算机调用一次 deployOne.cmd 或 syncOne.cmd 脚本。 其做法是通过使用 for 命令和 start 命令调用后续脚本以便在目标计算机上同时执行该任务。

for /f %%i in ('type machines.txt') do (start deployOne.cmd %%i %2 %3 )

或者

for /f %%i in ('type machines.txt') do ( start syncOne.cmd %%i %1) 

SyncOne.cmd/DeployOne.cmd 是使用 Web 部署的命令行界面的脚本,一个名为 msdeploy.exe 的命令可将远程 IIS Web 服务器与程序包同步或同步本地计算机上的整个 IIS Web 服务器。

msdeploy.exe -verb:sync -source:package=%2 -dest:auto,computername=%1 %3

或者

msdeploy.exe -verb:sync -source:webServer -dest:webServer,computername=%1 %2

第一个参数是从 sync.cmd 传递的计算机名称,deployOne.cmd 脚本需要程序包文件路径作为第二个参数。 最后一个可选参数是要传递到 msdeploy 的任何参数。 如果您希望将一个附加参数传递到 Web 部署,而不修改任何脚本,则此操作非常有用。 这样一个附加参数可能是 :

sync.cmd -whatif

当 Web 部署使用 -whatif 参数执行时,它会检查在指定命令的执行期间可能发生的所有错误,而不实际执行该命令。 我们建议您使用 -whatif 对生产环境执行 sync 命令,以查看是否会发生任何错误。 采取此预防步骤可以防止以不一致的状态结束。

删除本示例

若要删除本示例,请从管理/模型计算机中删除其所有文件。

其他资源

有关 Web 部署工具的详细信息,请参阅 http://learn.iis.net/page.aspx/346/web-deployment-tool/

有关如何使用 Web 部署同步运行 IIS 7.0 的两台服务器的详细信息,请参阅 http://learn.iis.net/page.aspx/446/synchronize-iis-70/

若要了解有关 Web 部署工具的安装和配置的详细信息,请参阅 http://learn.iis.net/page.aspx/421/installing-the-web-deployment-tool/

  2011-12-05