为“生成-部署-测试”工作流创建部署脚本
若要使用生成-部署-测试工作流来部署应用程序,你必须创建部署脚本并将其添加到你的生成中。 部署脚本是将生成复制到实验室环境中的计算机中的 BAT 或 CMD 文件。 如果你的生成包含安装软件包,你也可以使用部署脚本来运行安装软件包。 创建生成-部署-测试工作流时,可以将命令添加到运行部署脚本的工作流中。 在运行工作流时,生成控制器将在实验室环境中的指定计算机上的工作目录中运行这些命令。
请参见为 SCVMM 环境创建“生成-部署-测试”工作流或 为标准环境创建“生成-部署-测试”工作流。 以下各节讨论了如何创建部署脚本并将其用于生成-部署-测试工作流:
为部署准备生成文件
编写你的部署脚本
生成你的部署脚本
设置工作目录
将部署脚本添加到工作流
有关更多示例,请参阅 实现系统测试自动化
要求
- Visual Studio 旗舰版, Visual Studio 高级专业版,Visual Studio 专业测试工具版
为部署准备生成文件
你选择的安装应用程序的方式将决定你的部署脚本需要完成的主要任务。 你的应用程序的安装过程可能仅涉及将 EXE 复制到客户端计算机中,也可能涉及运行在多台计算机上安装文件的部署包。 下表描述了针对每类部署的这些任务。
重要
如果应用程序所依赖的系统必备软件未安装且由部署脚本在部署应用程序之前配置,则必须在实验室环境中准备计算机时手动安装此系统必备软件。如果你使用部署环境快照的 SCVMM 环境,则必须确保这些快照已安装系统必备软件。
安装类型 |
描述 |
||
---|---|---|---|
Web 服务部署包 |
你的部署脚本必须将生成文件和部署包复制到实验室环境中的目标计算机中,然后运行部署包。 为此,你可能需要将域名、服务帐户名称和 TFS 服务器名称作为参数传递到部署脚本中。 此类安装通常要求你在部署应用程序之前手动安装和配置系统必备软件(例如,Web 服务器或数据库服务器)。 系统必备软件的配置可能需要在目标计算机上启用应用程序部署的特定任务。 例如,如果应用程序使用 IIS,则实验室环境中的 IIS 服务器必须在部署应用程序之前已配置 Web 部署代理服务。 |
||
生成不具有安装软件包的文件 |
你的部署脚本必须将应用程序和生成文件复制到实验室环境中的目标计算机中。 |
||
安装软件包 |
你的部署脚本必须将安装软件包复制到实验室环境中的目标计算机中,然后运行此安装软件包。 当部署脚本运行安装软件包时,它们必须确保此安装软件包是一个无提示安装。 由安装请求的用户输入必须由你的部署脚本处理。 这包括凭据。 如果你的部署脚本不处理运行安装软件包时生成的所有用户输入,则应用程序部署将失败。 如果你不部署 Web 应用程序且需要用于部署的安装软件包,建议你使用 InstallShield 安装软件包。 有关 InstallShield 的信息,请参阅 Windows Installer Deployment。 |
编写你的部署脚本
这些是部署脚本执行的最常规任务:
获取生成控制器上的生成路径。 你可以将此路径作为命令参数发送到部署脚本中。
指定你的部署路径。
创建你的部署目录。 还可以手动执行此操作,而不是在你的部署脚本中执行此操作。 如果你将预先部署环境快照用于工作流,则只需在快照中的虚拟机上创建目录。
将你的部署包从生成路径复制到部署路径中。
运行部署目录中的部署包。
以下命令演示了部署脚本执行的一些常规任务。
REM set build path
set buildlocation=%1
REM set deployment path
set targetdir="C:\deploy"
REM create deployment directory
if not exist %targetdir% (cmd /c mkdir %targetdir%)
REM copy build to the deployment directory
xcopy /c /y /e %buildlocation%\*.* %targetdir%
REM if you are using a deployment package you can run it here, after you copy it to your deployment directory
生成你的部署脚本
在创建部署脚本后,你必须将这些脚本签入到版本控制中,然后配置它们,以便将其复制到生成输出中。 若要生成你的部署脚本,你必须先确保将它们存储在 Visual Studio 项目下,而不只存储在你的解决方案中。 你可以在 Visual Studio 中通过以下方式实现此操作:在**“解决方案资源管理器”中选择部署脚本,然后在“属性”下将“复制输出目录”更改为“始终复制”**。
设置工作目录
你可以为添加到生成-部署-测试工作流中的每组命令指定一个工作目录。 当你指定工作目录时,生成控制器将运行分配给该角色的每台计算机的工作目录中指定的命令。 如果在将命令添加到生成-部署-测试工作流中时不指定工作目录,则生成控制器将运行默认工作目录中的命令 − C:\Windows\System32。
重要
不要使用添加到生成-部署-测试工作流中的命令创建工作目录;如果这样做,则在部署脚本尝试将文件复制到这些目录中之前,将不会创建目录。
如果你指定工作目录,则必须确保在部署脚本将所有文件复制到该目录中之前已创建该目录。 不要使用用来将部署脚本添加到生成-部署-测试工作流中的命令创建工作目录。 如果这样做,则在部署脚本尝试将文件复制到目录中之前将不会创建该目录。 若要确保在部署脚本将文件复制到工作目录之前先创建该目录,你必须在实验室环境中的目标计算机上手动创建该目录,或者你的部署脚本必须在任何命令将文件复制到目录之前已创建该目录。
将部署脚本添加到工作流
将 Windows Shell 命令添加到生成-部署-测试工作流中以将应用程序部署到实验室环境中。 如果你使用的是部署脚本,则命令必须将你的部署脚本从生成控制器复制到目标计算机的工作目录中,然后运行部署脚本。 但是,对于仅涉及将几个文件复制到工作目录中的简单应用程序安装,你可以使用工作流中的 shell 命令而无需指定外部部署脚本。
若要添加从 Windows 提示符运行的命令(如 mkdir),或运行批处理文件,你必须使用 cmd /c 作为命令的开头。 例如,命令 cmd /c $(BuildLocation)\copyexe $(BuildLocation),其中 copyexe 为批处理文件 copyexe.bat,该命令会将可执行文件复制到虚拟机的本地目录中。
**内置变量:**在将这些命令添加到生成-部署-测试工作流中时,可以使用内置变量来标识某些路径和计算机。 还可以将这些变量传递到部署脚本中。
$(BuildLocation)
你的生成文件所在的完整路径或生成放置位置 - 如果其中一个是在生成-部署-测试工作流中配置的。 使用此变量可访问你的生成文件。$(InternalComputerName_<VM Name>)
SCVMM 环境中虚拟机的计算机名称。 当你不知道主机的计算机名称时,可使用此变量访问虚拟机主机。 如果你有一个用于设置需要计算机名称的 Web 服务器的部署脚本,则可以将该计算机名称作为参数传递给此脚本。 例如,如果 Web 服务器的虚拟机名称为 VM1,且计算机名称为 MyWebServer,则可以键入 $(InternalComputerName_VM1) 作为脚本的参数,这会将值 MyWebServer 传递给你的脚本。$(ComputerName_<VM Name>)
备注
SCVMM 环境中的网络隔离:如果针对 SCVMM 环境使用网络隔离,则 $(InternalComputerName_<VM Name>) 的值将与该环境的每个副本中的虚拟机实例的值相同,但 $(ComputerName_<VM Name>) 值不相同。
虚拟机的完全限定域名。 使用此变量从 SCVMM 环境外部访问计算机。 你可能需要将此变量作为参数进行传递以设置 Web 服务器。 例如,如果 Web 服务器的虚拟机名称为 VM1,则可以通过将 $(ComputerName_VM1) 参数传递给你的部署脚本来访问虚拟机的完全限定域名。