手游项目使用Jenkins搭建持续集成系统

时间:2021-11-04 08:07:54

正忙于工作,却被打断要给市场部门打个包?

测试部门要求每天有新的版本,可以验证bug?

策划要求每天有新的版本,可以跟进审查?

每次集成版本,总担心合并带来问题,要把主要模块手动跑个遍?

如果你遇到这些情况,还不得不手动打包,人工测试,那这篇文章正适合你。


持续集成(continue intergration,简称CI)系统,就是一个可以定时从源代码管理系统下载代码,调用编译器编译链接,调用测试工具测试,部署产物,并通知相关人员的自动化系统。

它的本质只是一个定时器,时机一到,就调用设置好的动作。

它需要跟其他各种系统打交道(代码管理、编译、测试等),是一个调度者。

它的实现可以很简单,比如使用windows的任务计划工具、unix的cron这些定时服务,定期调用一些脚本即可。

更方便的做法,是直接使用一些持续集成工具,简化脚本的编写。使用者往往只需要填写一下集成的周期,项目的SVN地址,项目工程文件的路径,测试文件的路径,产物的路径,通知者的email地址等,就可以让一套系统建立起来。

比较常用的持续集成工具,有Jenkins、Hudson、TeamCity等。

这里介绍下使用Jenkins,对一个cocos2dx手机网游的持续集成实践。


项目目前支持3个平台,windows、android、iOS,希望可以每日构建出这三个平台的版本。策划、测试人员也可以按需要随时构建版本

版本采用网页下载的形式提供给项目组成员

项目构建成功时,发送邮件给策划、测试;构建失败时,发送邮件给开发

版本构建成功并不只是编译通过,还希望跑一些集成测试,自动测试通过后,才认为版本构建成功


1.持续集成CI服务器的安装

Jenkins在各系统下的安装配置,网上的资料很多,这里就不再赘述了

因为要构建windows和iOS版本,因此在一台windows笔记本和一台mac air上各自安装了对应的Jenkins版本


2.Windows版本的构建

安装msbuild插件,使用这个插件,只要填入项目sln文件路径即可完成windows版本的编译工作


3.构建产物发布与邮件通知

目前我们使用批处理脚本,将exe和资源打包成zip文件的方式生成windows版产物

使用Jenkins的artifacts功能,在网页上提*物的链接

使用Jenkins的Email Notification功能,当构建不成功时,发送邮件给开发人员

使用Email-Ext插件,当构建成功时,发送邮件给产品人员


4.android版本的构建

首先使用ant,完成apk的批处理生成、打包功能(网上资料很多)

在Jenkins里使用批处理脚本,构建并发布android版本产物


5.ios版本的构建

在mac上的jenkins安装xcode插件,类似msbuild插件,原则上填入项目文件路径即可完成编译链接工作,但因为需要使用keychain签名,遇到了一些麻烦。

mac上的jenkins,会在os x上新建一个jenkins用户,并使用这个用户的keychain进行签名

目前采取的方式,从之前成功签名的用户keychain里,导出证书、私钥对给jenkins用户的keychain;将可用账户的provision profile拷贝到jenkins用户的Library/MobileDevice目录下。做完这些,就签名成功了。

目前使用两个jenkins主机,提供多个版本的构建。其实jenkins提供master/slave模式,只需要在master上安装jenkins,并添加slave节点,即可以进行分布式编译。


6.游戏的自动化测试

使用CI,自动构建部署只是第一步;在构建过程中,运用自动化的手段,对产物进行测试,对代码进行检查,才能最大化的发挥持续构建的威力。

项目主要使用lua开发,选择了luaunit作为测试框架,输出xml测试报告。在jenkins中指定测试报告的目录路径,就可以自动在测试失败时通知开发人员了。

目前的手游项目,只编写了一些简单的集成测试脚本。在脚本中对游戏的主要界面进行跳转,并在脚本中检查跳转是否成功;在脚本中调用一些功能函数,检查执行过程中是否产生异常。

这种测试方式,要求使用构建好的客户端产物作为测试主体,使用特殊的测试方式跑游戏。


7.总结

使用Jenkins搭建一个CI系统并不是一件很困难的事情,相比它带来的好处,很值得进行尝试。