点击「京东金融技术说」可快速关注

1

前言

随着京东金融业务的不断拓展,客户端开发团队人数激增,代码量急剧膨胀,业务的成长和人员的倍增给技术架构、团队合作、产品的交付都带来了巨大的挑战,本文将讲述京东金融移动APP是如何保证高效、稳定、安全、高质量的持续交付,希望借此机会向大家分享经验与教训,与大家共同探讨移动APP高质量持续交付之道,在讨论移动APP持续交付之前先介绍一下京东金融研发协同平台。

京东金融研发协同平台(简称JCI)致力于将构建、部署、测试、发布的过程自动化,以此来帮助用户高效且安全地交付研发成果;JCI集成了应用管理、组件管理、移动APP管理、产品管理、代码管理、编译构建管理、发布管理、审批管理等功能,从研发协同、代码质量、安全、快速交付、测试及结果反馈等几个方面打造了一条完整的工具链。

移动APP持续交付模块作为JCI最重要的模块之一,将测试、编译打包,发版、构建渠道包,上传生产服务器等手工操作实现了完全自动化,让整个交付过程变得可靠、可预期、可视化、改变了移动APP的交付方式,让开发人员从琐碎的重复劳动中解放出来。

2

平台理念

移动APP持续交付的理念是构建研发流程闭环。

3

JCI移动APP持续交付模块具备哪些能力?

从上面这张图可以看到,我们移动APP持续交付模块对开发所依赖的基础环境,如代码托管服务(提供svn和git两种方式)、在线代码review,组件类的依赖管理,iOS开发需要的证书管理,流程化权限管理、渠道号管理等都提供了统一的服务。除此以外,开发所有的活动都承载在项目管理里,项目管理中提供了变更管理、提测管理、版本管理、集成管理、任务和需求管理的能力。为了提高代码质量,也提供了静态代码扫描的能力,使用多种工具进行静态代码扫描,并可配置扫描任务,配置安全规则、展示扫描数据等。在整体的移动APP构建过程中,我们提供了Android/iOS机器环境管理、构建参数管理、调度管理、持续集成管理和包管理。而在发布过程中,根据不同的发布场景提供了不同的发布能力,比如说全量发布、灰度发布、渠道发布、Patch发布。

4

持续交付流水线

首先什么是持续交付?我们如何定义持续交付的呢?用通俗点的话讲,持续交付是指研发能够快速、安全、频繁的向客户交付价值,以便尽早得到生产环境中反馈的问题。

移动APP持续交付平台的核心就是建设可靠可重复的交付流水线,通过交付流水线,将全局过程标准化、自动化、可视化,关键流程和节点管控,实现并行开发过程中的协同和管理。

整个交付过程把需求、开发、集成、测试、发布一体化;各个阶段相互独立,并加入规范化的流程。

开发阶段:

当有项目需要开发,开发细化了产品需求和发布计划,拆分成独立的bundle,各个bundle有着自己的需求、开发、测试计划,相互独立,开发可以通过看板管理自己的需求和任务,需求关联上线分支,配合每次发布,统一记录跟踪需求处理进度。

开发创建分支进行编码,编码完成之后可以在平台上进行代码review,并在JCI创建一个变更关联开发分支进行构建编译。

当完成当前bundle的开发和自测以后,进入第二阶段即集成阶段。

集成阶段:

所谓的集成是我们把多个项目需求集成在一起,代码合并到集成分支,打成一个整体的包,然后对整体进行回归和测试。在集成阶段,开发同样在JCI上创建一个变更并关联到集成分支,然后将集成分支构建编译集成测试包,这个阶段会有加入一些静态代码扫描,JCI是集成了多种静态代码扫描工具进行代码的安全扫描,如果开发验证结果没问题,就可以提交测试进行全回归测试。

开发可以随时关联集成分支触发构建。构建成功后会把ipa/apk包生成二维码,并微信通知将二维码发送给相关测试或者开发,通过手机扫描二维码可直接安装对应版本。

在构建结果页面中展示当次构建的成果物(如.ipa、.apk、info.plist等文件),供有需要的用户进行下载。

集成阶段支持各种类型的持续集成任务配置运行和结果通知,静态代码扫描等,代码扫描结果如图:

测试阶段:

开发提交测试的同时,JCI会自动生成测试基线。

测试可以根据不同配置构建测试和生产环境包。

集成测试阶段,测试可以通过接口自动构造中间态测试数据,通过mock平台模拟同步、异步、多协议接口返回,根据交易ID及各类信息,自助跨服务追踪和定位问题,降低被动配合成本,减少测试依赖,提升稳定性和效率,如果测试认为当前的版本测试质量符合预期了,就可以提交发布申请,进入发布阶段。

发布阶段:

由测试提交发布申请,APP负责人进行审批,审批通过之后,分支代码会自动合并到基准线。

JCI平台支持渠道包的构建更新、推送和下载,并支持渠道号维护,如果需要构建渠道,可通过JCI批量构建渠道包,并推包推送给用户,一个持续交付流程就终结了。

渠道号管理支持上传渠道文件,同时也支持增量上传和覆盖上传。

渠道包构建和推送平台:

整个过程还有必不可少的一部分就是配置管理及代码协作工作流,保证整个研发过程能够高效、安全、高质量的交付,离不开可靠的分支策略,JCI移动APP的分支策略采用分支开发模式,具体的工作流如下图:

开发人员开始一个新的feature 从主干创建特性分支,然后在这个分支上提交代码修改,也就是说每一个feature(可以是一个人完成,也可能是多个人完成)对应一个特性分支。等到要发版时,从主干拉出一条新的发布分支Release A,将本次要发布的特性分支依次合并到发布分支。开发用发布分支去提测时会自动创建提测标签,发布完成之后,发布分支自动合并到主干上,并自动创建发布标签。

5

交付效率

前面我们已经介绍了整体的交付的流水线,对整个持续交付平台,效率其实是一个很重要的因素,如何来保证效率?这是我们未来要走的路,虽然现在研发流程、质量保障方面有了一些积累,但是在移动APP这个领域还有很多问题等待我们去解决。

整个交付效率要从开发、测试、发布三个阶段来提升。

如何提升开发效率?

随着业务的增加,代码功能稳步上升, 合并代码全靠开发线下进行,代码合并时间呈指数级上升,效率极低且容易出错,因此需要在架构上进行组件化拆分,使每一个组件都有一个自己独立的工程,解决协同合作的问题,提升研发效率。

另外就是二进制交付,比如说我们有一个APP有十几万行代码,本次发版修改了1000行代码,传统的源码交付的方式,是需要将这十几万行代码全部重新编译一次,才能产生这个APP,效率特别低下,如果能做到二进制的交付,也就是只需要交付增量的部分,这1000多行代码可能也就涉及到几个模块,这几个模块加在一起可能也就几千行代码,我们当前需要交付的就是这几千行代码的模块就可以了,由十几万行代码变成几千行代码的交付。

最后是依赖管理,它本身是依赖前面的二进制交付,前提是将整个APP都拆分成了模块,对交付而言只需要更新其中几个模块,这几个模块就可以通过依赖管理来管起来。

如何提升测试效率?

测试效率通常是通过自动化工具来实现。在之后JCI平台会提供了静态代码扫描、UI自动化工具来提升整体的效率,通过各种代码扫描工具进行扫描,然后获取扫描结果,集成到平台,自动化进行单元测试与统计数据采集,并生成报表。

如何提升发布效率?

平台已经具备批量构建渠道包并推送生产的能力,目前欠缺的是如何让平台具备精准发布的能力和线上监控的能力,精准发布就是可以按照版本来发,按照渠道、机型、网络、设备、IP等等,另一个就是多批次的方式控制发布节奏,同时每个批次可以控制我们的用户量,比如说第一批次发1000人,看一下效果,如果Crash指标都很正常,就再发一部人,逐渐地迭代,保证我们整体发布的可控。其实整个过程最核心的问题就是需要实时监控线上的数据指标,比如线上舆情数据、性能监控数据,以及线上实时crash数据、 UV数据等。通过这些数据来判断当前交付的版本是不是符合预期,一旦发现当前交付的版本并不符合我们的预期,那么就需要停止当前的版本发布,尽量减少用户的影响。如果我们当前线上的这个问题比较严重,那么我们会立刻对当前线上的版本做一个回滚,或者说我们通过热修复的手段来解决。

6

总结

最后总结,持续交付平台是一个一站式的全生命周期的管控平台,它提供了从开发到构建、测试、发布、运维、运营的全生命周期的管控,集成了开发规范、测试规范、发布规范,也是一个效率提升和质量提升的平台,在移动APP这个领域我们还有很多问题没有解决,前方的道路依然坎坷,我们会更加努力,并不断前行。

京东金融技术说

▼▼▼

原创·实用·技术·专业

不只一技之长

我有N技在手

你看,我写,共成长!

京东金融移动APP高质量持续交付相关推荐

  1. 手机淘宝的高质量持续交付探索

    转自: 前言 随着移动互联网的迅速普及,手机淘宝业务在迅速的成长,目前已经发展成为拥有40多个bundle(业务模块)的超大APP产品,在这后面有着数百名的研发人员的努力工作.业务的成长和人员的倍增给 ...

  2. 运用供应链管理实现更快速、更高质量的交付

    Cyber Statecraft Initiative的总监.Cyber Statecraft的联合创始人Joshua Corman认为供应链管理得当可以让持续发展百尺竿头更进一步.在GOTO Ams ...

  3. 《六周玩转云原生》- 云原生下的DevOps与持续交付

    六周玩转云原生 为了让开发者们在这个特殊的时期里可以学习到更多干货,京东智联云开发者特别策划了 <六周玩转云原生>系列课程,让我们的开发者可以迅速入门,持续充电. 时光倒流到本世纪初,&q ...

  4. 针对Java开发者的持续交付完整实施指南 | 内含福利

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作为一名开发者,您在开发完自己的应用之后,是否有去了解过 ...

  5. 如何带领项目团队按时高质量的完成交付

    我带领的项目经过几个月的奋战,上线了,完成了一次相对高质量的交付.项目运行稳定,能经得起高并发大流量. 回顾一下整个项目开发的过程,记录一下,有好有坏. 给你一群很牛比的人,你能做出很牛比的事,那不牛 ...

  6. 美团外卖持续交付的前世今生

    来自:美团技术团队 美团外卖自2013年创建以来,业务一直在高速发展,从早期单一的美食业务发展成为包含闪购.跑腿.闪付.营销.广告等在内的平台业务.每个业务团队虽然都有不同的业务形态,但是几乎都有相同 ...

  7. 万字长文!剖析美团外卖持续交付的前世今生

    作者 | 晓飞 王鹏 江伟 责编 | 唐小引 头图 | CSDN 下载自东方 IC 本文为美团技术团队投稿 美团外卖自 2013 年创建以来,业务一直在高速发展,目前日订单量已突破 3000 万单,已 ...

  8. 持续交付体系在高德的实践历程

    1. 前序 对于工程团队来说,构建一套具有可持续性的.多方面质量保证的交付体系建设,能够为业务价值的快速交付搭建起高速公路,也能为交付过程中的质量起到保驾护航的作用.本文为大家介绍持续交付体系在高德的 ...

  9. OPPO粟俊娥:OPPO研发云持续交付实践之路

    嘉宾 | 粟俊娥   整理 | 孙正印 出品 | CSDN云原生 2022年5月17日,在CSDN云原生系列在线峰会第5期"DevOps峰会"上,OPPO研发云产品负责人粟俊娥分享 ...

最新文章

  1. Comet OJ(Contest #8)-D菜菜种菜【树状数组,指针】
  2. 任意形状文本检测:Look More Than Once
  3. 自行搭建嵌入式持续集成工具:从0到1
  4. api php usdt 以太坊_php调用以太坊geth API说明
  5. python编程语言-Python有望超越Java排第二?风变编程解析编程语言新趋势
  6. 你不能忽视的HTML语言
  7. MySql 1248 - Every derived table must have its own alias
  8. android packages/apps 加入工程,深入安卓Package Manager和Package Installer
  9. 运放参数的详细解释和分析-part1-输入偏置电流和输入失调电流
  10. element的上传如何获取路径_element Ui 上传组件upload提交的文件目录 集成进度条样式...
  11. amd cpu 安卓模拟器_AMD的CPU如何运行安卓模拟器?
  12. Excel DATEDIF函数
  13. GPT,GPT-2,GPT-3
  14. Mac M1芯片处理器能用的Bridge 2020/2019 for mac 解决M1版MAC安装BR无法安装问题 完美支持M1芯片处理器
  15. Luogu P4944 【PION贪吃蛇】
  16. AI云时代大幕开启,华为全栈AI产品线将迎春天
  17. Scrum立会报告+燃尽图(Beta阶段第七次)
  18. 模电(十四)差分放大电路
  19. 记录:捕鱼达人开发笔记
  20. python msp_MSP系统使用python语言实现接口自动化

热门文章

  1. 使用纹理(Textures)
  2. 索马里ECTN/BESC/CTN证书 我司办理
  3. 百度杯2017年春秋欢乐赛
  4. 我和百度汽车公司 CEO 聊了下百度汽车未来的样子:更像是一个智能机器人
  5. 【Kaggle笔记】预测Imdb电影评分(随机森林)
  6. python编写程序、输出公元2000年到3000年所有闰年_编写程序,输出从公元2000年至3000年所有闰年的年号,每输出10个年号换一行.判断公元年是否为闰年的条件...
  7. CA6140车床拨叉831003课程设计(说明书+CAD图纸+工序卡)
  8. java 发送邮件嵌套HTML模板 (二)
  9. lisp字体 加框_AutoLISP文字加上下划线
  10. ClickHouse入门教程