快手移动端准入准出实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 快手移动端准入准出实践
——两条流水线支撑起快手的移动端研发体系
mijun@kuaishou.com
2. 讲师简介
请插入
您的照片
姓名
TITLE
ee.msup.com.cn
芈峮
快手前移动端效能负责人
《iOS测试指南》作者
3. 目录
• 准入准出流水线简介
• 背景介绍
• 快手准入流水线建设实践
• 快手准出流水线建设实践
• 回顾&展望
ee.msup.com.cn
4. 准入准出流水线简介
ee.msup.com.cn
5. 背景介绍
ee.msup.com.cn
6. 痛点
• 发版节奏快(单周发版)
• 单仓,开发人数众多(单端开发人员500+)
• 业务繁多,需要整体有节奏的协调
• 主干分支的代码质量必须仔细守护
• 如何尽早的发现问题
ee.msup.com.cn
7. 分支模型
ee.msup.com.cn
8. 代码仓库和组织关系复杂
研发模型选择
背景:平台类超级APP,多团队大规模基于单仓进行开发迭代
目的:降低沟通成本,规范研发流程
快手XX版
快手YY版
快手ZZ版
……
release
单仓
commit
部门A
ee.msup.com.cn
部门B
部门C
部门D
部门E
……
9. 快手准入流水线实践
ee.msup.com.cn
10. 快手准入流水线实践
• 分支合入优化
• 设置丰富卡点,保证代码质量
• 整体优化合入效率和质量
ee.msup.com.cn
11. 分支合入优化
研发模型选择
Feature通过MR合入DEV分支,Bugfix通过MR合入RB分支且被平台自动同步到下个迭代的DEV分支
主干DEV分支带版本号,定时封板删除旧版DEV分支,保证feature明确的生效版本
ee.msup.com.cn
12. 分支合入优化
研发模型——代码同步
背景:双周迭代,单周发版 并行的DEV和RB分支 代码同步
目的:从工具层面抹平合入DEV分支和RB分支的差异,让研发聚焦业务,避免因流程导致的事故
Merge替换cherry-pick
Cherry-pick方式
ee.msup.com.cn
Merge方式
13. 分支合入优化
研发模型——diff兜底
背景:高权限用户绕过规则强行合代码导致bugfix无法同步到下个迭代的DEV分支
目的:实时发现处理diff, 保障入RB分支的bugfix能严格同步到下个迭代的DEV分支
式
TARGET(HEAD)方
GIT MR默认方式
将分支间的diff采用“一切皆commit”的思路转化为commit之间的git diff对比
通过TARGET(HEAD)的方式更精准有效的进行两个分支之间的同步
ee.msup.com.cn
GIT MR
TARGET(HEAD)方式
14. 设置丰富卡点
ee.msup.com.cn
15. 设置丰富卡点
准入流水线
通过卡点和各类插件能力建设,保障主干分支的绝对稳定
持续优化合入效率
ee.msup.com.cn
16. 流程卡点——编译检查
准入流水线——主干编译
Feature分支并行合入主干,在合入前无法保证合入后主干分支100%无编译问题
提高合入前检出会导致编译问题的几率,提高合入后发现和解决编译问题的速度,从而保证主干分支的编译稳定
95%成功率
97%成功率
100%编译问题召回&解决
80%成功率
自然提交
ee.msup.com.cn
合入前source
分支编译检查
落后commits检查
预合入检查
合入后主干分支编译检查
监控主干分支,定位有问
题的提交和作者,及时解决
主干分支编译问题
17. 流程卡点——静态代码扫描
准入流水线——静态扫描
静态扫描能在早期发现代码中的隐患,通过较低的成本避免事故的发生
通过选取合适的扫描工具,丰富有效的扫描规则,持续提升准入阶段通过静态扫描发现问题的能力
应用层 – 静态扫描平台
应用层 – 流水线卡点
规则管理 模块管理 任务管理 准入扫描
Bug管理 权限管理 扫描报告 定时扫描
扫码数据分析 事故分析
静态扫描服务层
任务调度
规则维护性计算
扫描报告解析
任务执行层
扫描引擎(sonar, OCLint, Infer, FindBug.. )
扫描报告解析
规则集
ee.msup.com.cn
18. 流程卡点——包大小检查
准入流水线——移动应用包大小
移动应用包大小直接决定应用的用户增长
MR级的卡点保证包体的合理增长;部门、模块、文件多维度的分析报告,提供分析和优化的方向
【93%】MR级实时
检查,分析diff文件
【7%】MR级实时
检查,同时编译打包
base和head commit
分析包体
主干分支离线检查,二分查找
兜底diff文件分析误差,兜底MR级检查变化都在阈值
之内,整体变化失控的问题
检出方法
ee.msup.com.cn
多维度分析报告
19. 合入效率优化
准入流水线——合入效率,个性化流水线
伴随着检查手段的丰富,需要持续优化合入效率来保证研发合入代码的体验
通过各类黑白名单的配置和code diff分析来定制不同的流水线和运行策略,避免不必要的运行
是否运行编译
是否进行真实的编译打包,分析包大小
是否运行单测以及匹配单测用例
Git MR Code diff分析
……
是否挂载自动化测试节点
是否挂载一些耗时较长的性能检查节点
作者、需求等黑白名单
ee.msup.com.cn
……
20. 合入效率优化
准入流水线——合入效率,分级流水线
伴随着检查手段的丰富,需要持续优化合入效率来保证研发合入代码的体验
通过流水线分级,将可能的卡点前移到研发本地提交阶段和后移到MR合入后主干分支检查,减轻准入阶段压力
commit
feature分支
feature分支
主干分支
主干分支
push commit到feature时的流水线
功能性不完整,适用于检查编译、静态扫描、Code Review
feature分支合入到主干分支时的流水线
功能完整,适用于自测、单测、各类增量自动化测试
主干分支有代码合入后的流水线
不block合入,适合跑耗时较高的任务,比如重量级
的静态扫描、全量自动化测试、性能自动化等
ee.msup.com.cn
21. 成果
1 目前接入仓库109个,新仓库持续接入中
2 流水线日构建次数1800+
3 Bugfix误同步或漏同步次数0
4 上线一年来AccessProxy监控报警0次
5 MR按照流程规范合入率达到99.2%
6 准入流程各任务运行拦截数据已落地
Git仓库接入增长趋势
2020.3
2021.4
6
109
ee.msup.com.cn
22. 快手准入流水线实践
ee.msup.com.cn
23. 准出流水线
ee.msup.com.cn
24. 准出流水线
准出流水线——卡点协同
准出流程中有个多种召回问题的方法
准出流程的各个阶段需要多个业务方对召回问题的解决情况进行确认
风控、安全等
基础检查
封板
灰度1
异常数据解决
情况确认
ee.msup.com.cn
SDK版本确
认
回测确认
灰度2
异常数据解决
情况确认
数据确认
对比灰度
应用发布
异常数据解决
情况确认
25. 准出流水线总览
准出流水线总览
可视化展示从RB分支产生到应用发到应用市场和各类渠道的过程
通过流水线卡点协调各参与方在发版过程中的操作
通过异常分析、数据比对、舆情分析等手段在准出阶段召回更多问题
ee.msup.com.cn
26. 准出流水线异常问题分析解决
准出流水线——异常分析
基于RB分支多轮灰度召回问题
建立异常分析、异常分配、跟进解决的闭环来解决问题
异常分析
堆栈分配
灰度发布
问题跟进
ee.msup.com.cn
27. 准出流水线舆情监测发现问题
准出流水线——舆情分析
灰度期间,从多种渠道收集灰度版本的舆情
对舆情进行分析,找到问题设备,获取日志,解决问题
内测用户
客服反馈
站内反馈
舆情分析
上传日志 & 回捞日志
跟进、解决问题
ee.msup.com.cn
28. 准出流水线埋点数据检查
准出流水线——埋点数据比对
对比灰度同时用新版本和线上版本在同样的时间发同样用户特征、用户数量的灰度
各业务线基于对比灰度进行多维度的数据分析,主要确认数据埋点符合预期
新旧版本对比灰度
ee.msup.com.cn
各业务基于对比灰度的数据分析
29. 准出流水线版本正式发布
准出流水线——版本发布
通过各类自动、手工打包和发布工具,将应用发布到各类应用商店,推广渠道
应用商店更新
推广渠道更新
ee.msup.com.cn
30. 回顾&展望
ee.msup.com.cn
31. 回顾
流水线实践回顾
通过两条流水线串联了快手整体的客户端研发流程
两条流水线联合负责了从代码最终到用户手中的短视频服务的整体过程。
ee.msup.com.cn
32. 展望
• 数据度量不足
• 能发现问题保证基础的质量,但是解决问题成本
过高
• 动态化能力建设代码的挑战
ee.msup.com.cn
33. 关注msup公众号
获取更多工程效能实践案例