滴滴出行平台技术部 王涛 - 滴滴出行跨地域 iOS 构建优化与持续集成
2020-02-27 699浏览
- 1.滴滴出⾏行行跨地域 iOS 构建优化 与持续集成 王涛 wtlucky 滴滴出⾏行行 平台技术部 App架构组 架构师
- 2.
- 3.王涛 滴滴出⾏行行 平台技术部 App架构组 架构师 iOS 动态化 iOS 构建流程标准化,构建系统 / 平台 Blog ·http://blog.wtlucky.comGitHub · 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.集成构建平台
- 33.
- 34.设计思路路 • ⽀支撑多app,按需集成,SDK池 • 多端通⽤用,Android / iOS • 尽可能多得⽀支持各种⾃自定义需求 • 明确权限划分 • 内部系统打通(测试、发版、数据统计、OneApp等) • 新旧系统如何平滑过渡
- 35.现状及未来 • 上线1个⽉月 - 发版两次 • 接⼊入情况 - 滴滴乘客端(iOS、Android) - 企业级(iOS) • 打通平台 - 发版平台 - OneApp • 流量量全切 • 司机端、其他业务端接⼊入 • 测试平台、统计平台打通 • iOS / Android ⼀一致性开发 • ……
- 36.总结 • 滴滴出⾏行行的架构演进及构建历程的变化 • 构建体系中⼏几个关键节点的经验分享 - 标准化壳⼯工程 - 预编译优化 - 持续集成 • 集成构建平台
- 37.Q&A 有问题欢迎加微信咨询
- 38.