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

  • João Miranda
  • 王振峰

2014 年 12 月 10 日

话题:持续集成AndroidDevOps持续交付iOS语言 & 开发

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 组成,在Homebrewrbenw的协助下使用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 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

持续集成AndroidDevOps持续交付iOS语言 & 开发