1.简介
持续集成和持续部署是现代软件开发中非常重要的一环。它们能够帮助开发人员快速、高效地构建、测试和部署应用程序。本文将介绍如何使用CI/CD工具来提高开发效率,iOS方向工作内容。
本人就职于xxx公司基础架构组,负责 iOS 方面的CI/CD基础建设工作。本人在就职期间所做的事一整套解决多团队多人员并行开发,测试,集成,发布的解决方案。可解决不同业务,不同应用,不同版本的并行开发的难题,使iOS客户端开发组合更加灵活,节省繁杂的编译和集成工作,让开发者更专注于代码层面的开发工作。
核心特点:
组件模块化管理:组件模块化,低耦合通过Router通讯以及中间件通讯。
自动化操作:简单通过mac App图形化管理工具就可以实现一键安装并运行。
权限控制:应用负责人对该模块组件负有主要责任和管理权限,控制代码质量以及集成合并权限,每个模块组件需要在网页云效中创建并绑定git地址等其他设置。
开发高效:本地代码二进制编译节省编译时间,测试包代码二进制编译节省编译时间,一键集成省去了开发人员维护版本工作。
2.本地开发
1.首先下载安装mac App一体化管理工具,管理工具可以切换本公司其他所有APP工程进行开发。
2.git clone 某乎壳工程到电脑桌面使用一体化管理工具打开。
3.打开一体化工具软件并选择开发的项目工程自动识别项目基本信息以及组件信息等。
4.点击 Make 按钮命令组件以二进制形式安装到开发工程,这样节省编译时间,运行速度非常快,可以编写代码开发工作了。
5.点击 Make Source 按钮组件以源码的形式安装到开发工程。
6.可以更换开发其他工程
7.可以清理二进制缓存在本电脑中。
8.可以设置安装完毕自动使用xcode软件打开工程,也可以使用VSCode打开,以及Finder打开。
9.组件列表页分两部分,一部分是定制正在开发的组件,一部分是其他组件。
10.定制开发组件的切换可以选中组件并右键使用clone并集成到工程。
11.定制组件可以多选并右键使用一键创建联合MR并执行CI构建打包流程等。
12.控制台显示安装过程打印信息,失败报错问题一目了然的显示在其中。
13.安装完毕就可以使用xcode编写代码,编译,调试,安装等工作。
3.测试验收集成
测试
1.使用gitlab代码管理平台以及gitlab-runner ( gitlab 提供的一个 CI 持续集成的服务运行管理器)。
2.gitlab-runner编程配置触发时机是创建 MR。
3.当MR创建的时候gitlab-runner触发执行自定义脚本。
4.流程有pre-build,build,post-build(已废弃)。
5.pre-build过程中主要有网页清理旧的二维码已经下载地址信息,swiftlint检查等。
6.build过程主要是编译本次自定义代码打包成ipa并通过扫码下载安装,为了给开发者测试以及提交给QA进行测试,以及dsym上传等过程。
7.build过程可以通过MR描述输入自定义参数控制显示不同信息以及打包方式(合并校验检查,自定义版本号,二进制和源码打包切换,包体积分析显示等)。
8.当pipeline流水线通过之后,会将ipa上传保留到服务器并生成二维码显示在MR的操作网页上。
验收
9.MR网页是自定义的网页包含代码对比,代码code review,QA扫码下载安装测试,验证通过。
集成
10.一键集成功能无须开发者更改本次代码的版本号相关,会自动创建jenkins任务,任务执行合并MR的代码并自动生成新的版本号集成写入到项目壳工程,提交到远端仓库,达到本次开发代码进入工程的目的。
11.如果组件MR的目标分支是版本分支master_9.35.0,壳工程分支是master_9.35.0,那本组件的本次提交由featrure合并到master_9.35.0,生成版本号9.35.0.x,写入到xxx.rb文件参数的s.version = 9.35.0.x,提交并集成到壳工程master_9.35.0,同时触发master_9.35.0合并到dev并生成9.36.0.x版本号写入到xxx.rb集成到壳工程dev分支
12.如果本组件是一个基础组件,需要集成的目标APP有某乎,某堂等多个APP。那本次集成任务会触发多个jekins任务分别写入到不同的APP壳工程中。
二进制化
13.进入到工程的代码变更会触发重新制作二进制。
14.提交代码不断进入项目不断制作二进制,下载使用二进制,达到一个循环的平衡,如图所示。
统计汇总
15.以上CI/CD服务系统为5个APP不断循环服务。
16.通过grafana监控平台,可以看到制作上传下载二进制数量,每周打MR包1000个左右。
4.某乎mPaas平台发布系统
1.发布打包平台雅典娜系统。
2.选择当前要操作的APP,然后根据发版节奏每周二14:00开始发车,通过雅典娜网页系统点击选择从dev分支发车,发车版本号9.35.0版本。
3.雅典娜系统后台会触发调用jekins链接并传递参数给jenkins服务,执行一个jenkins任务,jenkins任务会选择空闲的打包机,自动执行预定脚本,脚本系统使用ruby语言编写的fastlane。
4.首先从dev分支checkout master_9.35.0,并提交至远端。
5.然后根据当前工程所使用的的组件发车分支设定为master_9.35.0(这一步在后面说明)操作成功的通知,通过企业微信形式发送到群聊。
6.新发车的版本是9.35.0,如果这个时候线上版本9.34.0修复bug,只需要把MR的组件目标分支改成9.34.0,以及集成的壳工程分支改成9.34.0,一键集成之后,代码进入预定版本9.34.0,以及会自动回合到9.35.0版本并集成到9.25.0壳工程分支。
7.每次要操作打包之前先更新build版本号,需要使用雅典娜系统更新版本号,版本号写入到工程的info.plist的shortVersion。
8.然后使用雅典娜点击本次打包执行商店包,灰度包,集成测试包,支付性能包,等多种不同的包。
9.商店包会执行一个jenkins任务,pod install ,build,以及自动上传到苹果后台等操作,也会对组件关系依赖分析,本地组件版本记录上传,等待处理完毕只需要提审就可以了。
10.通过雅典娜系统可以查询两个线上版本之间的MR代码变更,为了bug追踪查询。