公司开始让使用自动打包,一方面使用xcode打包太浪费时间,还要时刻关注打包的进度进行上传发布等等。搞了两天终于完成了打包。下面我写一个教程,防止大家踩坑。
一. 安装Jenkins##
- 使用brew安装Jenkins
$ brew install Jenkins
此处我是碰到一个坑,brew报错: depth 0: certificate has expired (10)
解决办法:
(1).查看当前镜像环境$ gem sources -l
(2).移除淘宝镜像:$ gem sources --remove
https://rubygems.org/
(3).添加ruby-chian镜像:$ gem sources --add
[https://gems.ruby-china.com/] (https://gems.ruby-china.com/)
- 运行Jenkins
$ jenkins
- 配置Jenkins
在浏览器输入 http://localhost:8080/ 就能看到Jenkins运行起来了
刚开始Jenkins会让输入一个密码我们cd到红色字体的路径下面打开文件就能看到密码了
image.png
然后复制密码填进去就可以进入到下面这个界面了,接下来安装一些建议的插件,我们点击左边的按钮,等待把所有的插件都安装好(ps: 如果有的没有安装成功,强烈建议点击右下角的重试,直到把建议安装的都装好)
image.png
下面是安装界面
image.png
等待进度条走完之后,页面会自动跳转(如果没有跳转手动刷新下界面就行了)
然后进入设置管理员账号密码的界面
image.png
二. 配置 Jenkins##
- 安装插件
Keychains and Provisioning Profiles Management(管理本地的keychain和iOS证书的插件)
点击管理Jenkins -> 管理插件
image.png
在可选插件中搜索 Keychains and Provisioning Profiles Management 勾选安装(ps: 因为我已经安装过了,所以我的在已安装一栏中)
- 配置Keychains and Provisioning Profiles Management
在Manage Jenkins 中点击 Keychains and Provisioning Profiles Management
点击:选取文件->Upload->保存
依次将Jenkins所在的机器的login.keychain(/Users/管理员用户名/Library/keychains/login.keychain-db 复制一份改名成成login.keychain)上传保存
选择上传Profiles 文件
文件路径
/Users/apple/Library/MobileDevice/Provisioning Profiles/
这个一定要选对,如果选择错误,在打包的时候就会报签名有问题如果实在不知道是哪一个,可以先全都删除
然后在Xcode里面重新下载
image.png
image.png
选择你的配置文件
然后文件夹下面那个你添加的配置文件就是你需要选择的
选择完成后 保存就行了
image.png
三. 配置构建项目##
1.点击新建Item
image.png
2.然后点击第一个,创建一个自定义的项目,接下来就是配置Jenkins了
image.png
(1)接下来看自己需求,是否保留旧的构建、保持构建的天数和保持构建的最大个数(可以按自己的需要去选择填写)
image.png
(2)配置源码管理
SSH 验证方式: 因为我们公司是企业github所以用https 账号密码登录会报错,我这里选择使用SSH验证
复制项目链接(SSH链接)到 Repository URL
image.png
在 Credentials 点击添加,选择 SSH Username with private key
在红色框里添加你的SSH私钥(是私钥,不是公钥),因为公钥你是添加到github上了,只有私钥才有权限访问你的github
image.png
用户名密码方式
复制项目链接(HTTS链接)到 Repository URL
在 Credentials 点击添加,选择 Username with password
然后填写你的github的用户名和密码,点击添加就可以了
image.png
在指定分支填写你的分支名(这个我设置了,但是打包的时候还是会根据当前分支去打,可能是用fastlane执行打包命令的原因)填写源码库浏览器和项目URL
image.png
(3)构建触发器 也就是自动打包时间间隔
我这里选择的 Poll SCM 然后在日程表中添加时间间隔
我这里填写的是H 20 * * 这个意思就是H小时然后,后面跟着数字,在后面就是日月年,代表的我认为是每次都触发,也就是每天每月每年,但是Jenkins的时间不是绝对的,一般都是在随机在半点,也就是设置20点,大概会在20:30分左右会触发,如果需要两个时间,那么格式可以这样H 20,22 * * *
这里参考(作者:Alanxx)
image.png
(4)构建环境
选择 Keychains and Code Signing Identities
下面自动填充了,不用管
image.png
然后选择 Mobile Provisoning Profiles 红色框里选择刚才在配置 Keychains and Provisioning Profiles Management 中添加的配置文件
image.png
(5)构建
然后配置timeout minutes(构建超时时间)这个一定要写大一些,我原先是默认的3分钟,一直提示超时,打包比较慢的话配置的时间短会报超时
image.png
这些都完成之后我们就要写构建脚本了,我们选择 Execute shell 脚本
image.png
暂时保存接下来我们配置 fastlane
四. 安装配置fastlane##
确认是否安装ruby,版本号要大于2.0。如未安装,移步百度
$ ruby -v
确认是否安装Xcode命令行工具
$ xcode-select --install
如出现xcode-select: error: command line tools are already installed, use "Software Update" to install updates
则已安装,否则会出现提示框,点击安装即可。
安装fastlane
sudo gem install fastlane
cd 进入工程根目录 ,执行命令
$ fastlane init
会出现四个选项供你选择
1.自动截屏。这个功能能帮我们自动截取APP中的截图,并添加手机边框(如果需要的话)
2.自动发布beta版本用于TestFlight
3.自动发布到AppStore
4.手动管理设置
image.png
我们选择4
全部完成后我们打开生成的fastlane文件夹下的Fastfile
填写打包脚本
platform :ios do
desc "Description of what the lane does"
before_all do
# faselane中pod install的操作
# cocoapods
end
#-----------------------------------------------------------------------DEV配置
lane :development_build do|options|
currentTime = Time.new.strftime("%Y-%m-%d %H: %m: %S")
gym(
scheme:"app",
configuration: "Release", #Release 或者 debug
clean:true, #清除上次构建
project:"app.xcodeproj", # 项目入口文件名 如果是工作控件请换成:workspace: "xxx. workspace"
export_method:"development", #打包的类型 ad-hoc 或者App Store等
output_directory:"/Users/apple/Desktop/Dev_GuildChat#{currentTime}", #打包输出路径 我写的是时间,防止文件夹生成相同报错
output_name:"Dev_GuildChat" #生成的ipa文件名
)
firim(firim_api_token: "9b02ebfcfc17ded9410d046472c76d04") # token 在fir 上查看。 end
end
end
添加插件
我们是用fir上传,需要添加fir插件
gem 'fastlane-plugin-firim'
然后配置就算完成了
五. 配置Jenkins 脚本##
打开刚才的Jenkins配置页面
解释下下面的命令的意思
cd 到ios项目的根目录
然后执行fastlane 命令
development_build和fastfire文件中的 lane :development_build 名字要保持相同
然后保存
image.png
然后执行点击build now,等待执行结果
image.png
执行成功了之后会有下面的日志输出,然后就去导出文件夹和fir上查看结果吧
image.png