移动 | 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
    7
    ARM 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 固态硬盘)
    • 结果:暂未处理,需要申请

三、实践结果

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 固态硬盘)