Etsy如何实现移动应用的持续集成

Etsy的工程师Nassim Kammah在2014年欧洲Velocity大会上分享了Etsy实现移动应用持续集成的经验。Nassim的分享主要针对iOS应用,几乎没有涉及到Android相关领域。

移动应用的发布流程与web应用差异非常大,尤其是iOS应用。Etsy因在web应用领域以每天50次的发布频率而广为人知,但是Apple审查流程的花费时间平均就得5天。更严重的是移动应用不像Web应用,它是由用户来决定是否升级他们的应用。所以移动应用的错误成本远远高于Web应用,因为修复移动应用的错误要花费更长的时间。天花乱坠的设备型号致使测试问题尤其复杂。

Etsy面对以上挑战采取了与Web应用相同的措施,包括坚持相同的持续集成原则和使用相同的持续集成工具。Etsy尝试实现了持续发布,当然不可能对他们的用户因为这办不到,但是面向他们的内部团队是可以做到的。他们有一套自动构建流程,这套流程一直持续到生成的二进制文件提交到Apple的审查流程。同时他们在开发流程中严格控制移动应用的质量,与自动化流程相辅相成。

Etsy使用Jenkins作为CI服务器,每次提交都会触发主线上的一次构建。Etsy认为在他们的工作流程中,Apple的持续集成方案,Xcode服务器和bots并不满足需求。当使用Xcode构建应用时,代码签名过程由IDE自动处理,但是此方案在持续集成流程中并不适合。Etsy的方案是将代码签名时必需的配置文件存储在GitHub仓库中(Etsy使用GitHub企业版)。当在集成服务器上进行构建时,将配置文件传给Shenzhen来构建存储iOS应用的.ipa文件。Shenzhen属于[Nomad-cli]的一部分,Nomad-cli是专门用于iOS开发的一套命令行工具。

Etsy的集成(或构建)机器设施由25台Mac mini组成,在Homebrew和rbenw的协助下使用Chef进行配置。由于Mac OS X上的配置自动化难以实现,安装Xcode还需要鼠标点击,所以该流程还没有完全自动化。

Etsy的工程师尽量做到每天提交,继承了他们开发Web应用时的传统。鉴于每次提交都会触发主线上的构建,所以Web应用开发中用到的相同技术也应用到了移动应用开发中。例如抽象分支,允许即使在持续结构性变更的情况下也能做到持续发布,特性开关(又名特性标识或配置标识),允许在代码中进行分支开发和在主线上持续提交。以上技术会导致代码过于复杂,但是Nassim说相对于源码控制上的分支,他们的团队更倾向于使用这些技术。通过这种方式,持续集成流程可以保证其原则的完整性。即使如此,还是有许多地方需要完善。比如,只在应用启动时检测特性开关,这样就丧失了Web应用所拥有的灵活性。在移动应用中还用到了TryLib,该工具允许开发人员在提交变更之前在持续集成环境里测试变更是否正确。

在他们团队刚成立的时候,移动应用开发还没有引入单元测试,而后期将其引入现有代码非常具有挑战性。虽然有些团队通过在后期冲刺阶段安排一名开发人员来达成单元测试覆盖率,但Etsy使用了一种不同的方式:测试武馆。他们安排6名工程师聚集在一间办公室里,办公室里只有一台电脑、一台投影仪和一个简单的测试目标。每个开发人员有三分钟来控制键盘然后依次轮换,最终测试过程演变成了互相分享和学习的过程。

由于移动设备五花八门,致使移动应用的功能测试所面临的挑战有些特殊。Etsy使用Calabash实现了功能测试,然后必须在模拟器和真机上运行测试。Calabash是一套基于Cucumber的自动验收测试框架,适用于iOS和Android。Etsy内部使用常规的模拟器进行测试,但将真机上的测试外包给了Appthwack,这是一家在真机上做自动化测试的在线服务公司。Nassim说他们选择测试设备的依据是通过研究用户设备的Google分析数据。根据Nassim的介绍,功能测试之所以古怪,主要原因是超时。所以Etsy使用滚动窗口通过率的概念来评估应用质量的可信度。滚动窗口通过率定义了一种从红色到绿色的的渐变,与在两种颜色之间二选一相对。

Etsy除了向他们的内部团队推出持续发布的版本外,还会定期人工执行另外两项额外的质量保证措施。一项措施是“应用自转”,8名志愿者聚集在一间办公室中,并伴有一名QA辅助人员,以及各种移动设备。此项工作的目标是在预定义的时间内发现尽可能多的Bug。另一项措施是开发团队通过Bug Hunting工具直接从设备上收集Bug,并附带截图协助定位Bug。该工具包含一个分级的游戏机制,并且还对报告Bug的人进行排名。

由于Android相关技术还不成熟,所以Nassim没有详细介绍Etsy使用相关技术的过程。

查看英文原文:How Etsy Does Continuous Integration for Mobile Apps

感谢崔康对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至[email protected]。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

你可能感兴趣的:(Etsy如何实现移动应用的持续集成)