基于
vSphere的自动部署随着计算机软硬件技术的不断发展,软件应用环境也越来越复杂,而相应我们的测试环境的部署也越来越复杂。就拿Exchange服务器来说吧,一个典型的Exchange 2003应用,包含一台域控制服务器,一台Exchange 2003服务器,甚至Exchange 2003服务器可以直接安装在域控制服务器之上;而一个典型的Exchange 2007或者Exchange 2010应用,则包含一台域控制服务器,一台边缘传输服务器,一台中心传输服务器,一台邮件服务器,而不建议域控制服务器和其他服务器角色安装在一起。不计算实际主机软件安装的复杂度,部署的effort就要翻上4倍。所以,如果能够对测试环境进行自动部署的话,可以节约相当多的人力成本。
1. 为什么要自动部署测试环境
我们为什么要进行自动部署,或者说自动部署有什么好处呢?
Ø 节约实施部署以及人员培训的人力成本
Ø 减少失误造成的机会成本
Ø 快速恢复或者创建测试环境
Ø 自动化测试与auto build集成的需要
2. Exchange测试环境概览
a) Exchange典型测试环境
b) Exchange支持的软件环境
l Windows版本
² Windows 2003 R2 SP2 x86
² Windows 2003 ENT SP2 x86
² Windows 2003 R2 SP2 x64
² Windows 2003 ENT SP2 x64
² Windows 2008 SP2 x64
² Windows 2008 R2 x64
l Exchange版本
² Exchange 2003 SP2
² Exchange 2007 GM, SP1, SP2, SP3
² Exchange 2010 GM, SP1
l Exchange服务器角色
² 邮箱服务器
² 中心传输服务器
² 客户端访问服务器
² 边缘传输服务器
l MS cluster
² SCC Exchange 2007
² CCR Exchange 2007
² SCR Exchange 2007
² MSC Exchange 2003
² DAG Exchange 2010
3. Exchange基于vSphere上的自动部署解决方案
目前使用的最普遍的虚拟化平台是VmWare公司的vSphere产品。vSphere提供了比较丰富的编程接口,我们可以比较方便的通过这个接口远程控制虚拟主机。下面简单介绍一下基于vSphere的一个自动部署解决方案
a) vSphere编程接口介绍
i. vSphere API
vSphere API可以实现所有vSphere客户端的功能,可支持Perl,C#以及Java,而下面就是该解决方案通过vSphere API使用到的功能。
Ø 创建虚拟机
Ø 开关机
Ø 快照管理
Ø 网络管理
Ø 磁盘管理(共享磁盘)
具体vSphere API的使用说明可参见:
http://www.vmware.com/support/developer/guest-sdk/
ii. VIX API
VIX API可以实现对vSphere所管理虚拟主机的操作,可支持Perl以及C,下面就是该解决方案通过VIX API使用到的功能:
Ø 文件拷贝
Ø 命令执行
Ø 快照管理
Ø 开关机
具体VIX API的使用说明可参见:
http://www.vmware.com/support/developer/vix-api/
b) vSphere命令行工具介绍
如果对编程不是很熟悉的话,也可以考虑直接使用vSphere提供的一些命令行工具,只是一些高级功能可能无法使用
i. ovftool
ovftool是VmWare官方提供的虚拟机镜像导入/导出工具。它可以支持下列功能:
Ø 将VmWare WorkStation或者VmWare Server的镜像转换为ovf镜像,或者直接导入到vSphere主机
Ø 将ovf镜像直接导入到vSphere主机
Ø 将vSphere上的虚拟主机导出到ovf镜像
Ø 克隆vSphere上的虚拟主机到当前或者远程主机
Ø 支持thin Provisioning的转换
详细信息可以参考:http://www.vmware.com/resources/techresources/1013
ii. Vmrun
Vmrun是VIX API的命令行版本,包含在VIX API的安装包中,可以实现VIX API的绝大多数功能。最新版本的vmrun可支持VmWare Workstation 7.0, VmWare Server, vSphere。可以实现文件拷贝,开关机,快照管理,远程命令执行等功能。
详细信息可以参考:http://www.vmware.com/support/developer/vix-api/vix110_vmrun_command.pdf
c) 自动部署框架介绍
该自动部署测试框架将通过vSphere API以及VIX API实现的功能封装成批处理命令,然后使用ant将这些批处理文件组织起来。
i. 批处理封装
ii. Ant简要介绍
Ant其实是Java的自动编译框架,不过因为它下面的一些比较实用的功能,我们将之借用为自动部署的框架。
Ø 流程控制(各步骤之间的依赖关系)
Ø 并行/串行任务支持
Ø 强大参数文件支持
比如上图中的示例,我们可以将之转换为ant的5个步骤:
iii. Exchange自动部署示例
首先我们需要分析Exchange服务器部署流程并形成流程图,然后就可以根据流程图组织ant脚本。开始我们使用的ant脚本包含多台Exchange角色,形成一个庞大的脚本文件,但是后来发现这种方法非常的不灵活,就改变为单个ant脚本只复制单个Exchange角色,然后再用另外一个ant脚本来负责控制具体一次安装哪些Exchange角色,且正常情况下我们也只需要修改该控制文件。这样最后的控制文件非常简单,非常容易修改。且我们可以直接通过ant调用单一角色的安装脚本,进行单一角色的安装。
下面以域控制服务器举例介绍该服务器安装脚本:
StepA(ImportVM): 使用ImportLocalOvfVApp.bat或者ovftool从ovf镜像导入虚拟机
StepB(PowerOnVM): 使用PowerOnVM_VIX.bat开启虚拟机
StepC(CopyFile): 拷贝应用静默安装脚本以及Exchange安装包到虚拟机
StepD(NewSid): 使用newsid命令更新windows虚拟机的sid
StepE(SetNetwork): 使用netsh命令配置虚拟机的IP,网关,Dns
StepF(InstallAD): 使用AD静默安装方式安装域服务器
iv. 自动部署实施经验分享
在这里将我们使用自动部署部署exchange测试环境中的一些技巧给大家分享一下,也算是抛砖引玉吧:
Ø 不要将单一ant脚本设计的过于复杂,特别不要将将来可能拆解安装的内容绑定在同一脚本中
Ø 脚本中不可避免会使用到一些sleep指令,建议将sleep的时间参数化,以利于在不同性能的vSphere主机中可以很好的定制
Ø 将ant脚本以及静默安装脚本的数据文件中的可能改变的部分尽量参数化,以变化灵活的定制
Ø 静默安装脚本的数据文件的修改尽量使用工具读取参数文件自动进行修改,尽量避免手动修改
Ø 在必要的步骤前增加创建快照的步骤,以便于万一自动部署失败,可以尽快重新部署
Ø 在自动部署测试环境之外,可以创建一些补充安装测试工具的脚本,例如windbg之类
Ø 自动部署的稳定性高于性能
4. 其他项目如何应用该自动部署框架
如果其他项目同样需要使用该自动部署框架进行测试环境的自动部署,建议采取以下的步骤
a) 分析测试环境的安装流程,形成流程图
b) 根据测试环境需要准备虚拟机ovf镜像
c) 针对流程图中的每一个步骤,创建静默安装脚本
d) 提取安装过程中的可变内容形成参数文件
e) 根据流程图编制ant流程脚本,如有必要可以形成类似exchange角色一样的模板文件
f) 调试ant流程脚本
g) 形成项目自动部署指南,指导项目组成员完成测试环境的自动部署