随着新东方APP团队的不断发展,在需求迭代快、参与人数多,多个版本同时并存快速迭代的背景下,如何确保同时进行的版本快速持续集成和质量保证,对我们的研发和QA提出了许多挑战,一方面是对效率的提升,另一方面是对质量的把控。本篇目的在于介绍新东方APP团队如何升级和使用新的APP持续交付平台提升发版效率。
在新东方APP持续交付平台交付前,一个新的APP版本发版过程大致有以下几个流程步骤:版本号人肉确认、手动修改版本号、人工操作jenkins编译构建、上传fir.im外网空间或将包通过IM等方式传递给其他测试人员。如果android发版的话还得加固、安全扫描再上传对应应用商店。此时最大的问题就是APP管理混乱,人工介入过多,每次发布都需要花费很长的时间。存在的具体问题是:
1)版本口口相传,无从查证,历史版本追溯困难。
2)版本和构建之间的没有关联,版本构建记录无从查询。
3)内部测试包分发使用的是的外部fir.im,收费经常出现下载次数不够,内网下载速度慢等问题。
4)人肉干预过多,发版穿梭在多个系统之间,甚至跨多个系统操作,效率太低。
5)APP自动化测试参与度不够:整个测试过程中,手工测试占比大,APP的稳定性测试和UI兼容性测试还没有发挥更大的效用。
本篇的APP持续集成实践解决方案(一)将重点讲述如何解决问题1-4,下一篇文章我们将围绕问题5重点讲述我们的实践(敬请期待)。
针对上述的问题,我们调研了其他互联网公司的解决方案,通常互联网公司开发了自己的移动端持续交付的平台进行相应的版本管理、测试包分发系统以及持续集成和质量把控。如携程的MCD、美团、字节跳动等公司有自己的移动端持续交付平台。分析调研后,我们改进现有的APP发版的流程,搭建和开发内部的移动端交付平台,新的APP交付流程与之前相比,产品、研发和QA之间:
1)APP版本申请线上化,管理规范。
2)APP测试版本分发问题,节约fir.im账号每年费用几万。
3)发版构建版本可以快速追溯。
4)一站式APP发版操作,解决了穿越多个系统,构建版本上传外网,外网下载构建版本的速度问题。
项目基于前后端分离框架,前端使用VUE ElementUI,后端使用Python Flask+Java Springboot开发框架,APP构建使用shell脚本,数据库使用Mysql,缓存通过Redis存储。如下图所示:
基于系统流程化的方式,在APP构建过程中串联起了版本申请、编译构建、自动测试、安全加固、安全扫描、发布管理以及下载安装等核心环节。
1)新增版本时,当确定版本类型后,版本名称会由系统进行维护。
2)测试过程中,会记录构建历史、关联缺陷记录以及需求任务。
3)测试通过后,可以直接进行安装包加固、扫描以及发布等操作。
经过一个多月的试用打磨和bug修复,目前该系统已经稳定提供给新东方APP团队的DEV、QA以及PM日常APP发版使用,极大的减少了研发过程中的版本沟通成本,提高了APP发版中的效率。
除了目前已打通的APP发版流程环节外,目前APP自动化测试参与度不够,下一步利用已有的版本管理和移动设备管理系统,整合APP的稳定性测试和UI兼容性测试等常规的自动化测试。在CI/CD实践中,让提交的代码进行一次完整的编译、静态代码扫描、测试、打包、发布,及早的发现并修复问题,保证研发质量的同时快速迭代产品,体现持续集成(CI)、持续交付(CD)的真正价值。
该项目为研发二团队QA联合研发一团队QA老师开发的共建项目,开发者有新武老师QA团队老师,还有晓鹏老师QA团队也提出了宝贵的意见。感谢在系统开发过程中碰到前端问题雨楠、长州相关老师的指导,感谢APP团队的研发老师在使用过程中提出的各种宝贵需求和意见。
在平台的开发过程中,我们也引用了业内一些成熟的APP安全解决方案。过程实现可详见《APP自动化加固+安全检测》。