移动 | Jenkins打包优化实践
【Jenkins打包优化】
- 记录一次打包优化过程
移动端使用Jenkins打包优化实践
[TOC]
一、背景说明
1. jenkins打包必要性
- 提升项目的效率:降低测试和开发的沟通成本,提升开发的编码效率,有助于测试的测试效率
- 减少移动端开发设备的资源占用,提高移动端个人开发效率(减少手动打包、导包、发包的占用时间,占用时间开发可以用于其余功能点的开发优化)
- 提高测试和开发的沟通效率 (自主打包,测试只需关注JIRA单的关闭情况,无需额外沟通)
- jenkins 地址:http://10.50.6.114:8080/
- 涉及端:融易运Android,融易运iOS,陆运通经纪人Android,陆运通经纪人iOS,陆运通货主Android,陆运通货主iOS
2. 各端打包效率
端 | 单个端打包时间(分钟) | 多个端打包时间(分钟) |
---|---|---|
iOS | 20~30 | 30~60 |
Android | < 10 | 10~20 |
混合 | / | > 30 |
二、优化实践
从上述打包效率表格可以看出,打包的多数时间占用在iOS端,本次实践从iOS端入手
打包设备:14款mac mini,2.6GHz 双核 Intel Core i5 处理器,8GB 1600MHz LPDDR3 内存,1TB (5400-rpm) 机械硬盘
1. 优化方向
软件:编译优化
硬件:设备升级
2. 软件方面优化
(1. 分析原因,打包主要耗时实践
主要分析依据来源于jenkins控制台的完整日志
Pods库的全量更新拉取
Xcode编辑工具对于代码的检测包括但不限于:_Nullable检测,[-Wstrict-prototypes]等
Xcode打包时Debug环境对于iOS各个架构的编译
1
2
3
4
5
6
7ARM CPU的不同指令集
ARM CPU的不同指令集 对应设备
armv7 iPhone 3GS,iPhone4,iPhone 4s,iPad,iPad2,iPad3(The New iPad),iPad mini,iPod Touch 3G,iPod Touch4
armv7s iPhone5, iPhone5C,iPad4,iPod5
arm64 iPhone5s,iPhone6、7、8,iPhone6、7、8 Plus,iPhone X,iPad Air,iPad mini2(iPad mini with Retina Display),
x86_64架构 模拟器64位处理器测试(Xcode 9目前IPhone类型编译出来的都是x86_64)
i386架构 模拟器32位处理器测试
(2. 上述各问题的优化实践
- Pods的全量拉取速度慢
- 原因:在于iOS端的三方框架源指向Github,
- 处理:目前将三方框架托管至内部gitlib上
- 结果:已处理
- Xcode编辑工具对于代码的检测
- 原因:Xcode会对代码可靠性,安全性等做一些列检查以及提示
- 处理:不关闭代码检测
- 结果:不关闭
- Xcode Debug环境的对于iOS各个架构的全量编译
- 原因:iOS各个机型对应着不同的编译版本,打包时候对于各个版本都进行编译,已达到各个设备都能安装的目的,目前主要包括:armv7,armv7s,arm64
- 处理:针对实际情况:目前测试机最低为iphone6,所以将dev环境下armv7,armv7s架构移除,只保留arm64,Dev环境下 build active architecture 设置yes
- 结果:已处理
2. 硬件方面优化
- Wifi影响包上传蒲公英速度
- 原因:公司内网单个账号500k的上传速度较慢
- 处理:建议申请单独账号,并且申请解除网速限制
- 结果:暂未处理,需要申请
- 硬件设备版本较低
- 原因:目前打包机使用的是14款mac mini(2.6GHz 双核 Intel Core i5 处理器,8GB 1600MHz LPDDR3 内存,1TB (5400-rpm) 机械硬盘)
iOS的Xcode内存占用已高达5.5GB的内存占用,打包机还需运行jenkins环境,Android的打包环境等 - 处理:建议升级设备 (建议设备:MacMini Apple M1 芯片,配备 8 核中央处理器、8 核图形处理器和 16 核神经网络引擎、16GB 统一内存、1TB 固态硬盘)
- 结果:暂未处理,需要申请
- 原因:目前打包机使用的是14款mac mini(2.6GHz 双核 Intel Core i5 处理器,8GB 1600MHz LPDDR3 内存,1TB (5400-rpm) 机械硬盘)
三、实践结果
1.软件优化结果
以网货平台的 陆运通货主iOS端 打包时间为例
打包涉及的端 | 优化前(分钟) | 优化后(分钟) | 优化比例 |
---|---|---|---|
单个项目打包 | 20~30 | 近两个版本:10、13 | 30% ~ 50% |
多个项目打包(存在Android、iOS多个项目并行) | 40~50 | 近两个版本:30、40 | 10% ~25% |
2.测试硬件升级结果
测试使用设备:M1芯片的MacBookPro,内存8G(内存良好)
测试项目:项目陆运通货主iOS端
- 单个货主项目纯打包时间2分钟(不包含代码更新,导包上传),单个项目出包的时间减少比例达90%
- 预计整体:多个项目打包时间优化比例可达70%以上
四、总结
- 软件层面优化比例:在单个项目上效果显著,多个项目同时出包的情况下,效果不理想,严重依赖于设备以及内存
- 建议1: 单独开通wifi账号,解除网速限制,只提供打包机使用
- 建议2: 升级设备(建议设备:MacMini Apple M1 芯片,配备 8 核中央处理器、8 核图形处理器和 16 核神经网络引擎、16GB 统一内存、1TB 固态硬盘)