笔者实验环境
- OS:
macOS High Sierra Version 10.13.6
- Java:
Java SE 8u181
- Fastlane:
2.101.1
- Jenkins:
2.121.2
- iTerm2:
Build 3.1.7
1.安装Fastlane
Fastlane
可以自动化打包iOS
和Android
项目,代替了Xcode
的打包过程,官网地址Fastlane,项目是基于Ruby
的,安装流程如下:
xcode-select --install
(一般都已经安装好了,可以直接跳过)[sudo] gem install fastlane -NV
(如果没有权限,添加参数[sudo] gem install -n /usr/local/bin fastlane -NV
)
安装之后到项目根目录下进行初始化
fastlane init
fastlane init swift
(Swift
项目初始化)
期间需要需要输入账号和密码,然后会生成文件Gemfile
和文件夹fastlane
,Gemfile
文件内容为:
1 | source "https://gems.ruby-china.com" |
地址改为国内镜像,因为用了CocoaPods
集成第三方包,添加支持。fastlane
文件夹下生成了Appfile
和Fastfile
两个文件,前一个保存账号信息,后一个文件为配置信息,我们接下来主要添加操作命令道该文件,先看官网示例:
1 | lane :release do |
上面这个就是最简单的打包命令,其中build_app
属于fastlane
的action
,在每个任务里面都是各种action
组成的,可以通过fastlane action
命令查看所有的action
,比较常用的是:
1 | cert |
具体可以查看官网文档库,里面针对每个参数都有详细的说明,如gym
文档地址包括各参数,记得千万要自己去看看最新的这些,因为找网上的许多文档可能已经比较久了,没有更新及时,导致有些参数过时或者新的版本一些必要参数缺失。记得需要修改编码为UTF-8
,虽然不影响但在执行的时候会报错:
1 | export LC_ALL=en_US.UTF-8 |
可以加载环境变量或者每次执行命令之前也可以执行,环境变量里面为~/.bashrc
, ~/.bash_profile
或 ~/.zshrc
,根据你自己的环境而定,然后source ~/.xxxx
即可生效。
下面以一个打包AppStore
版本示例说明:
1 | lane :release do |
其中export_method
即表示需要打包那种包,包括app-store
, ad-hoc
, package
, enterprise
, development
,developer-id
,两个路径分别表示编译和导出路径,之后日志和一些中间生成的文件以及导出的包都会出现该路径下,export_options
里面参数为证书名称,其中StarSunLee_release
表示你在苹果开发者中心创建的证书名称,然后在项目里面执行命令构建命令:
1 | fastlane release |
这样就可以自动构建版本、打包、导出,最后会在../release
目录下出现XXX.ipa
文件就可以上传到苹果开发中心去了,当然这里还有个action
为deliver
直接将文件上传到App Store
去,因为我们后面要用Jenkins
持续集成这里不做下一步处理。
2.安装Jenkins
Jenkins
为自动化集成项目,官网地址,下载地址,这里两种版本,长期支持版本LTS
和周更新版本Weekly
,最后不要下载最新的,笔者系统环境是Mac
,安装之后出现各种问题毅然放弃了,因为需要Java
支持,这里列出版本:
Java
版本为8
,下载地址Jenkins
版本为2.121.2
,直接下载war
包
下载完成之后启动Jenkins
命令为:
1 | java -jar jenkins.war --httpPort=8080 |
其实在Mac
还可以下载pkg
文件直接安装,brew
也可以安装,但是因为其他各种坑原因这种直接命令启动方式最靠谱,如果要后台运行nohup java -jar jenkins.war --httpPort=8080 &
即可,或者使用supervisord
进行管理。启动Jenkins
后会在用户目录下~/.jenkins
进行解压和配置文件,之后工作目录也在此,在浏览器打开地址http://127.0.0.1:8080/
即可进入Jenkins
配置界面,其中密码放在~/.jenkins/secrets
目录下,之后即可进入工作界面。
3.集成配置
Jenkins
每个任务成为Item
,新建Item
即可,因为代码放在自检系统gitlab
上面,首先需要进行ssh key
配置,这样就可以不需要输入密码直接获取代码,打开菜单Credentials
,然后选择Global credentials (unrestricted)
,点击Add Credentials
,如下图所示在红色框分别输入名称和本地SSH Key
,内容文件夹~/.ssh/id_rsa
私钥信息,对应的公钥id_rsa.pub
需要保存在gitlab
上面才可以免密获取到代码。
接下来新建Item
,输入任务名称然后选择Freestyle project
,然后ok
到下一步,其中主要配置的源代码和构建脚本,如下图所示:
只要填写gitlab
地址和选择分支即可,然后就是构建脚本,如下图所示:
其中的fastlane adhoc
就是之前建立的打包命令,后面跟着的curl
命令是把ipa
文件直接发布到蒲公英,就实现了自动化集成,当然这里展示的是最基本的使用方法。
4.注意事项
- 在安装
Jenkins
的时候,其实可以使用Mac
系统的pkg
和brew
模式,但是因为配置文件导致很麻烦,出现的问题也较多,所以还是选择最原始方法直接命令启动。 Jenkins
兼容问题:因为目前的LTS
版本只支持Java 8
,之前直接下载了Java 10
,然后下载了Weekly
版本,导致插件无法安装,最后放弃,不再使用最新版本做小白鼠了。Fastlane
在打包过程中可能会多次出现错误,不过只要Xcode
能够打包就可以,大部分都是因为签名证书问题,这个在cert
和sigh
两个action
配合起来,直接强制重新签名即可,只在第一次需要,然后就可以查看开发者中心的证书名,修改Fastlane
配置文件,指定名称即可。- 另一个是关于在
Linux
服务器去集成打包iOS
项目,最好别!老老实实拿Mac
电脑!
小结
本文只是展示了最基本的使用方法,在实际生产环境中打包需要许多相关配置参数才能构建,如版本号和各项目证书都需要处理好才能达到整个公司各项目的持续集成。后续继续更新一些高级特性和使用方法。