创建并运行部署命令文件
作者 :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 解决方案部署到测试环境
在开发人员工作站上,打开 Windows 资源管理器,然后浏览到 Publish-Dev.cmd 文件的位置。
双击该文件以运行它。
如果出现 “打开文件 - 安全警告 ”对话框,请单击“ 运行”。
如果配置设置和测试服务器已正确设置,则当 MSBuild 处理完项目文件时,命令提示符窗口将显示“ 生成成功 ”消息。
如果这是你第一次将解决方案部署到此环境,则需要将测试 Web 服务器计算机帐户添加到 db_datawriter,并在 ContactManager 数据库上db_datareader角色。 配置 用于 Web 部署发布的数据库服务器中介绍了此过程。
注意
只需在创建数据库时分配这些权限。 默认情况下,生成过程不会在每次部署时重新创建数据库,而是将现有数据库与最新架构进行比较,并仅进行所需的更改。 因此,只需在首次部署解决方案时映射这些数据库角色。
打开 Internet Explorer 并浏览到 Contact Manager 应用程序的 URL, (例如
http://testweb1:85/ContactManager/
,) 。验证应用程序是否按预期工作,以及你是否能够添加联系人。
结论
通过创建包含 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 命令行参考。