GDC 2012 Build and Test Automation

A Two-Part Technique for Efficiently Scaling Build and Test Automation

一篇老PPT了,主要是讲如何用虚拟化技术来进行快速的版本发布和自动化测试的,还是挺有借鉴意义的。在硬件环境越来越复杂,需要支持的平台和OS越来越多的情况下,资源量巨大的游戏如何做构建/测试的自动化。我觉得是每个工作室都得面对的,当然一开始肯定都是暴力解决,但是效率实在太低了(上一个MMO项目,在一开始的时候,编译一次版本,需要大概40-60分钟,包括Exe编译,资源打包,拷贝,安装包制作之类的)。小作坊这样搞还行,要真正的做工程,还是得用工具来解决。否则完全无法扩展,组合爆炸之后也无法维护了。下面看看EAC Burnaby的解决方案。

在应用这个技术之前的工程效率是这样的:

2-3个平台,每个平台至少4种编译配置,每种配置编译耗时15-30分钟,每天40-100+次提交。每次集成耗时60-120分钟!每一次提交后自动测试要等上1到2小时,显然一天提交不了几次。

首先想到的解决方案是把编译和测试拆开,并行化:

但是这样下来,需要的服务器数量也会很多,带来很多管理开销:

于是引入虚拟化技术是很自然的了:

要进一步效率还要对瓶颈所在进行定量分析,想当然可不行:

于是流程变成这样的:

但是数据拷贝还是很费时的,比如同时开5台测试虚拟机进行5组测试,那每台机器都得拷贝一份数据,如何避免拷贝?

具体的实现方法是利用SANiSCSI技术:

SAN可以看作一个巨大的虚拟磁盘阵列,可以从这些磁盘中划分出单个的逻辑磁盘单元,也就是LUN,利用iSCSI协议,这个LUN可以被局域网中的任何机器装载,就好象是本地磁盘一样使用(并不是通常意义上的网络共享磁盘)。当编译的虚拟机完成版本构建,我们可以生成一个包含编译版本的Snapshot,这个Snapshot可以用很低的成本进行一次Clone操作,生成的Clone磁盘可以被其他机器转载,这样就能达到快速的把版本构建结果交给测试机器使用的目的,并且Clone镜像可以生成N个,这样,可以用不同的虚拟测试机,同时并行跑不同的测试用例!

最后的流程就是这样的了:

实际使用的硬件:

最后的结果还是非常好的:

  • 150种不同的编译配置,高峰期每天800-1000次版本构建,只需要一个非全职工程师维护
  • 200+组测试用例,高峰期每天跑1200-1500次,一个非全职工程师维护,虚拟机支持150种测试环境

Tags: , ,

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>