腾讯亿级用户规模自研业务的上云实践解读,立即报名 了解详情
写点什么

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

  • 2014-12-10
  • 本文字数:1929 字

    阅读完需:约 6 分钟

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

2014-12-10 01:282049
用户头像

发布了 28 篇内容, 共 80333 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

制造业企业数据平台建设最佳实践分享

华为云开发者联盟

数字化转型 数据平台 制造业 华为工业云平台 数据应用

Linux 管道操作符详解

CRMEB

墨天轮访谈 | 腾讯张铭:带你揭秘王者荣耀背后的游戏数据库 TcaplusDB

墨天轮

数据库 TcaplusDB 国产数据库

天翼云分布式缓存服务(Redis)的几个核心概念

天翼云开发者社区

夯实领军者地位 奶酪业务协同发展领先赛道

科技新消息

芝士就是力量!蒙牛2021年报笑出大大的CHEESE

科技新消息

TypeScript 之 any:哪里可以用?哪里不能用?

杨成功

4月月更

人工智能融合赋能平台,赋能智慧城市智能化升级

脑极体

再论ORACLE上云通用技术方案

天翼云开发者社区

每周更新 | Verilog测试用例及波形展示图功能上线

ShowMeBug

易观分析:海外业务亮眼,研发+IP运营助力中手游持续增长

易观分析

IP 中手游

使用 Amazon Cloud WAN 构建您的全球网络

亚马逊云科技 (Amazon Web Services)

Builder 专栏

蒙牛2021年报:数智化大脑为乳业插上腾飞翅膀

科技新消息

天翼云新一代V5云主机,Kvm之生,Xen之死!

天翼云开发者社区

龙蜥社区&龙蜥开发者获CSDN 2021年度技术影响力「年度开源项目」奖和「年度社区之星」

OpenAnolis小助手

开发者 开源项目 龙蜥社区 年度影响力 社区之星

打造中国优质奶源基地 筑牢高质量发展基石

科技新消息

爆款国民冰淇淋原来是这样“凝冻”出来的

科技新消息

压测做的不对,等于白做

基调听云

性能测试 压测 全链路压测

领域驱动设计入门与实践[下]

LigaAI

团队管理 DDD 领域驱动设计思想 LigaAI

PolarDB-X 正式发布2.1.0版本,Paxos 重磅开源

阿里云数据库开源

数据库 阿里云 开源 分布式 PolarDB-X

天翼云分布式缓存服务(Redis)的应用场景(干货)

天翼云开发者社区

设计消息队列存储消息数据的 MySQL 表格

唐尤华

架构实战营

把一整个生态圈藏进大沙漠 看蒙牛如何在每一滴奶中藏进玄机

科技新消息

java培训浅谈程序员怎么避免面试过程中碰壁

@零度

面试 JAVA开发

整机生产制造头部厂商雷神科技加入龙蜥社区

OpenAnolis小助手

Linux 开源 整机

专属云资源包计算规格探秘

天翼云开发者社区

61%!产品+渠道创新 蒙牛冰淇淋业绩收录有史高增长

科技新消息

教你三步实现CDH到星环TDH的平滑迁移

星环科技

国产数据库

Etsy如何实现移动应用的持续集成_持续集成_João Miranda_InfoQ精选文章