滴滴出行跨地域 iOS 构建优化与持续集成 王涛 滴滴出行

2020-03-01 313浏览

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