Jenkins部署理解及问题分析
惯例吹水,新到的16GB定制Mac mini,虽然是mini,毕竟i5六核,专为打包而生。
我们经常听到自动化打包,持续化打包,一键打包,到底是个什么东西?知其然更要知其所以然。
【概念】
Package:打包
就是把代码源文件(.h/.c/.m);
预编译/编译:生成汇编代码文件(.o);
汇编:将汇编代码转换成机器可以执行的指令;
链接:模块拼装,生成可执行文件(.exe/.ipa./apk);
可能还要签名加配置搭载平台等,最后完成用户使用的软件的过程。
CD?Continuous Delivery:持续部署
通过自动化的构建、测试和部署循环来快速交付高质量的产品;
换句话说,就是写完代码就打包,一直写代码一直打包;
只要你代码不报错,我发布频率就能更快。
CI?Continuous Integration:持续集成
通过自动化的构建实现持续化组装;
换句话说,就是一键启动,只要你写完代码点击了开始编译,我就一直给你干到输出可执行产物;
只要你配置的好,我就让你不用点点点。
Jenkins:金啃丝
[https://jenkins.io/zh/](https://jenkins.io/zh/)
是一款开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化。
Fastlane:法斯特蓝
[https://fastlane.tools/](https://fastlane.tools/)
是一套使用Ruby写的自动化工具集,旨在简化Android和iOS的部署过程,自动化你的工作流;
它可以简化一些乏味、单调、重复的工作,像截图、代码签名以及发布App。
Cocoapods:扣扣破的丝
[https://cocoapods.org/](https://cocoapods.org/)
Swift和Objective-C Cocoa项目的依赖管理器。它拥有超过63,000个库,并在超过300万个应用程序中使用。CocoaPods可以帮助您优雅地扩展项目。
Git:鸡特
[https://git-scm.com/](https://git-scm.com/)
Git是一个免费的开源分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有事务;和SVN一样是管理代码源文件版本的。
Fir:发儿
[https://fir.im/](https://fir.im/)
Fir就是一个自动分发平台,主要功能就是将你打好的包生成二维码,供用户直接下载安装的好管家。
【半自动化脚本】
众所周知,我们iOS的开发打包流程,主要有以下几个步骤:
1.通过SourceTree等git管理工具拉取代码到本地
2.通过Cocoapods导入三方库
3.然后打开Xcode编写代码
4.配置Develope/Distribution证书
5.通过xcbuild完成编译后
6.再通过Archive完成打包.app
7.接着在Organizer中导出成.ipa文件
8.打开xxxxx网站,上传文件生成下载链接提供给测试
即使每一步都比较顺利,也需要开发童鞋周而复始的点点点,
每天开发完成第一句,先给自己打个气
那么这些重复的工作怎么让机器代劳呢
我们分析一下是否可以采用shell脚本,当然python脚本同理
1.可以通过git指令实现clone及checkout
2.有pod install指令
3.未来可能有AI
4~7.有fastlane指令(集成llvm等)
8.有fir-cl指令
#示例
#更新 cocoapods
#pod install --no-repo-update --verbose
#通过Fastlane打包
echo '开始Fastlane打包'
fastlane gym --workspace "XXProject.xcworkspace" --scheme "XXProject" --export_method 'development' --clean
#查找fastlane打包ipa路径
relative_path=`find . -name "*.ipa"`
relative_path=${relative_path:1}
ipa_path=`pwd`$relative_path
echo 'IPA路径:'$ipa_path
#通过Fir-cli上传张指定目录的ipa
echo '开始上传至fir.im'
fir publish $ipa_path -c='测试Jenkins发包,请忽略这个包' --verbose
【全自动】
1.相对于手动拉代码Jenkins有git插件
Git插件.png
2.相对手动打包和证书管理Jenkins有Xcodeplugin
3.后续上传操作,Jenkins支持shell脚本