创建并运行部署命令文件

作者 :Jason Lee

本主题说明如何生成一个命令文件,以便使用 Microsoft 生成引擎 (MSBuild) 项目文件作为单步可重复的过程运行部署。

本主题是一系列教程的一部分,这些教程基于名为 Fabrikam, Inc 的虚构公司的企业部署要求。本教程系列使用示例解决方案( Contact Manager 解决方案)来表示具有实际复杂程度的 Web 应用程序,包括 ASP.NET MVC 3 应用程序、Windows Communication Foundation (WCF) 服务和数据库项目。

这些教程的核心部署方法基于 了解生成过程中所述的拆分项目文件方法,其中生成过程由两个项目文件控制,一个项目文件包含适用于每个目标环境的生成说明,另一个包含特定于环境的生成和部署设置。 在生成时,特定于环境的项目文件将合并到与环境无关的项目文件中,以形成一组完整的生成说明。

流程概述

在本主题中,你将了解如何创建和运行命令文件,该文件使用这些项目文件对目标环境执行可重复的部署。 从本质上讲,命令文件只需要包含 MSBuild 命令,该命令可以:

  • 告知 MSBuild 执行与环境无关的 Publish.proj 文件。
  • 告知 Publish.proj 文件哪个文件包含特定于环境的项目设置以及查找位置。

创建 MSBuild 命令

了解生成过程中所述,特定于环境的项目文件(例如 Env-Dev.proj)设计为在生成时导入到与环境无关的 Publish.proj 文件中。 这两个文件一起提供一组完整的说明,告知 MSBuild 如何生成和部署解决方案。

Publish.proj 文件使用 Import 元素导入特定于环境的项目文件。

<Import Project="$(TargetEnvPropsFile)"/>

因此,使用 MSBuild.exe 生成和部署 Contact Manager 解决方案时,需要:

  • Publish.proj 文件运行 MSBuild.exe。
  • 通过提供名为 TargetEnvPropsFile 的命令行参数,指定特定于环境的项目文件的位置。

为此,MSBuild 命令应如下所示:

msbuild.exe Publish.proj /p:TargetEnvPropsFile=EnvConfig\Env-Dev.proj

从此处开始,只需一个简单的步骤即可迁移到可重复的单步部署。 只需将 MSBuild 命令添加到 .cmd 文件。 在 Contact Manager 解决方案中,“发布”文件夹包含一个名为 Publish-Dev.cmd 的文件,该文件正是这样做的。

%windir%\Microsoft.NET\Framework\v4.0.30319\msbuild.exe Publish.proj /fl /p:TargetEnvPropsFile=EnvConfig\Env-Dev.proj
echo 
pause

注意

/fl 开关指示 MSBuild 在调用MSBuild.exe的工作目录中创建名为 msbuild.log 的日志文件。

若要部署或重新部署 Contact Manager 解决方案,只需运行 Publish-Dev.cmd 文件即可。 运行该文件时,MSBuild 将:

  • 生成解决方案中的所有项目。
  • 为 Web 应用程序项目生成可部署的 Web 包。
  • 为数据库项目生成 .dbschema 和 .deploymanifest 文件。
  • 将 Web 包部署到 Web 服务器。
  • 将数据库部署到数据库服务器。

运行部署

为目标环境创建命令文件后,只需运行该文件即可完成整个部署。

将 Contact Manager 解决方案部署到测试环境

  1. 在开发人员工作站上,打开 Windows 资源管理器,然后浏览到 Publish-Dev.cmd 文件的位置。

  2. 双击该文件以运行它。

  3. 如果出现 “打开文件 - 安全警告 ”对话框,请单击“ 运行”。

  4. 如果配置设置和测试服务器已正确设置,则当 MSBuild 处理完项目文件时,命令提示符窗口将显示“ 生成成功 ”消息。

    如果配置设置和测试服务器已正确设置,则当 MSBuild 处理完项目文件时,命令提示符窗口将显示“生成成功”消息。

  5. 如果这是你第一次将解决方案部署到此环境,则需要将测试 Web 服务器计算机帐户添加到 db_datawriter,并在 ContactManager 数据库上db_datareader角色。 配置 用于 Web 部署发布的数据库服务器中介绍了此过程。

    注意

    只需在创建数据库时分配这些权限。 默认情况下,生成过程不会在每次部署时重新创建数据库,而是将现有数据库与最新架构进行比较,并仅进行所需的更改。 因此,只需在首次部署解决方案时映射这些数据库角色。

  6. 打开 Internet Explorer 并浏览到 Contact Manager 应用程序的 URL, (例如 http://testweb1:85/ContactManager/ ,) 。

  7. 验证应用程序是否按预期工作,以及你是否能够添加联系人。

    验证应用程序是否按预期工作,以及你是否能够添加联系人。

结论

通过创建包含 MSBuild 说明的命令文件,可以快速轻松地生成多项目解决方案并将其部署到特定目标环境。 如果需要将解决方案重复部署到多个目标环境,可以创建多个命令文件。 在每个命令文件中,MSBuild 命令将生成相同的通用项目文件,但它将指定一个不同的特定于环境的项目文件。 例如,要发布到开发人员或测试环境的命令文件可能包含以下 MSBuild 命令:

msbuild.exe Publish.proj /p:TargetEnvPropsFile=EnvConfig\Env-Dev.proj

要发布到过渡环境的命令文件可能包含以下 MSBuild 命令:

msbuild.exe Publish.proj /p:TargetEnvPropsFile=EnvConfig\Env-Stage.proj

注意

有关如何为自己的服务器环境自定义特定于环境的项目文件的指南,请参阅 配置目标环境的部署属性

还可以通过在 MSBuild 命令中重写属性或设置各种其他开关来自定义每个环境的生成过程。 有关详细信息,请参阅 MSBuild 命令行参考