滴滴出行平台技术部 王涛 - 滴滴出行跨地域 iOS 构建优化与持续集成

单于傲之

2017/12/18 发布于 技术 分类

ArchSummit全球架构师峰会是InfoQ中国团队推出的面向高端技术管理者、架构师的技术大会,参会者中超过50%拥有8年以上的工作经验。 ArchSummit秉承“实践第一、案例为主”的原则,展示新技术在行业应用中的最新实践,技术在企业转型中的加速作用,帮助企业技术管理者、CTO、架构师做好技术选型、技术团队组建与管理,并确立技术对于产品和业务的关键作用。

文字内容
1. 滴滴出⾏行行跨地域 iOS 构建优化 与持续集成 王涛 wtlucky 滴滴出⾏行行 平台技术部 App架构组 架构师
3. 王涛 滴滴出⾏行行 平台技术部 App架构组 架构师 iOS 动态化 iOS 构建流程标准化,构建系统 / 平台 Blog · http://blog.wtlucky.com GitHub · github.com/forkingdog
4. • 滴滴出⾏行行乘客端架构演进历程 • 架构演进背后构建流程的演进历程 • 构建体系关键节点介绍及实践经验 • 集成构建平台的设计思路路 / 现状 / 未来
5. 从头说起
6. • 供需匹配⼯工具 • 功能单⼀一 1.0
7. • 交易易平台 • 出租⻋车⼀一条业务线 • ⼤大锅饭 2.0
8. • 产品多元化 • 专⻋车加⼊入 • 代码逻辑膨胀 3.0
9. • 平台化整合 • 多项业务快速上线 • ⼯工程极度膨胀 • 开发⼈人员地域分散 4.0
10. 痛点与挑战 • 代码急剧膨胀,⾼高度冗余 • 多个异地团队协作 • 合并代码全靠吼 • QA 测试回归灾难 • 效率极低易易出错 时间(周) 功能开发 6 代码合并 4.5 3 1.5 0 1 2 4 5 业务线
11. 组件⼯工程化 Git CocoaPods Git Workspace Pod Pod Workspace
12. • 平台组件化 • 140 + 组件(Pods) • 维护管理理困难 • 开发者不不友好 5.0
13. 再次升级 • OneTool ⼯工具 • 标准化壳⼯工程改造,合久必分,分久必合 • 基于 CocoaPods 的预编译优化
14. Rider Payment Pickup …… Passenger Taxi Express …… Common Component Common Component App Base Business Component Base Component Runtime
15. “滴滴的构建系统⾯面临的是最复杂的环境,10+业务,国 际化业务发展,300+⼯工程师并⾏行行协作.” – 专题出品⼈人:左志鹏
16. 标准化壳⼯工程
17. 组件⼯工程化的问题 • 各⼯工程特异性配置 • 持续集成困难 • 新⼈人开发者不不友好 • Debug 困难
18. 标准壳⼯工程 • 本地远程隔离,本地⾃自由配 置,远程按需加载 • 开发 \ 集成 \ 测试环境统⼀一 • xcconfig - 配置⽂文件化 Local Workspace Local Pods Local Pods Local Pods Sync Workspace Podfile Sync Workspace OnePods.rb
19. 创建过程 Create workspace Clone shell project Create .proj_ config Copy embed files Generate Podfile pod install • 过程繁琐 • 程序员⼿手⼯工操作难度⼤大 • 易易出错 ⼯工具⾃自动化基础
20. OneTool • CocoaPods / Ruby • 使 iOS 开发构建简单快捷 • 整个构建系统的桥梁梁 • ⼯工程创建 / dev pod / pods modify / pre-compile …
21. 概览 OneTool One Commands OnePods 提供 one 命令,由开发者主 动调⽤用 提供 pod_one 命令,由 CocoaPods 主动调⽤用
22. OneApp • ⽆无使⽤用⻔门槛 • ⽤用户友好
23. 实践经验 • 尽早建⽴立标准化壳⼯工程 • 统⼀一组件库配置⽂文件规范(podspec) • 善⽤用 xcconfig ⽂文件 • 依赖配置⽂文件的权限要控制好 • 尽量量⼯工具化,⾃自动化
24. 预编译优化
25. 痛点 • 140 + Pods • 上千万⾏行行源代码 • 编译时间感⼈人 • CocoaPods ⾃自身不不⽀支持预 编译集成 时间(min) 60 45 30 15 0 源码 预编译
26. 解决⽅方案 • vendored_libraries 加载静态库⽂文件 • 创建 custom pods • local pod 集成 source code integrated project Podfile.lock compile specified target static library modified podspec lib pod
27. 发布 source pod develop & test N succeed? Y upload to FTP server pre compile
28. 踩过的坑 • 源码中有预编译宏(#if_has_include 等) • 使⽤用 subspec • 使⽤用结构体 / 联合体 • podspec 编写不不规范
29. 持续集成
30. 演进历程 • ⼈人⾁肉 merge - 效率极低 - 错误后置 • Jenkins - 流程⾃自动化 - 错误预判 - ⽆无法处理理依赖 - Job 数量量爆炸 • 集成构建平台 - 界⾯面友好 - 集成⽅方式⾃自定义 - 组件管理理 - 多 App 按需集成 - 集成快照恢复 效率 4 3 2 1 0 ⼿手⼯工⼈人⾁肉 Jenkins 构建平台
31. 构建流程 提交代码或 tag 触发集成 ⽤用户 通知成功 创建⼯工程 克隆隆 Pod 打新 Tag 更更新依赖 集成⼯工程 集成失败 编译检查 集成成功 预编译流程 Push Tag 提交依赖 平台
32. 集成构建平台
34. 设计思路路 • ⽀支撑多app,按需集成,SDK池 • 多端通⽤用,Android / iOS • 尽可能多得⽀支持各种⾃自定义需求 • 明确权限划分 • 内部系统打通(测试、发版、数据统计、OneApp等) • 新旧系统如何平滑过渡
35. 现状及未来 • 上线1个⽉月 - 发版两次 • 接⼊入情况 - 滴滴乘客端(iOS、Android) - 企业级(iOS) • 打通平台 - 发版平台 - OneApp • 流量量全切 • 司机端、其他业务端接⼊入 • 测试平台、统计平台打通 • iOS / Android ⼀一致性开发 • ……
36. 总结 • 滴滴出⾏行行的架构演进及构建历程的变化 • 构建体系中⼏几个关键节点的经验分享 - 标准化壳⼯工程 - 预编译优化 - 持续集成 • 集成构建平台
37. Q&A 有问题欢迎加微信咨询