公司开始让使用自动打包,一方面使用xcode打包太浪费时间,还要时刻关注打包的进度进行上传发布等等。搞了两天终于完成了打包。下面我写一个教程,防止大家踩坑。
一. 安装Jenkins##
- 使用brew安装Jenkins
$ brew install Jenkins
此处我是碰到一个坑,brew报错: depth 0: certificate has expired (10)
解决办法:
(1).查看当前镜像环境$ gem sources -l
(2).移除淘宝镜像:$ gem sources --removehttps://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: 因为我已经安装过了,所以我的在已安装一栏中)
image.png
- 配置Keychains and Provisioning Profiles Management
在Manage Jenkins 中点击 Keychains and Provisioning Profiles Management
image.png
点击:选取文件->Upload->保存
依次将Jenkins所在的机器的login.keychain(/Users/管理员用户名/Library/keychains/login.keychain-db 复制一份改名成成login.keychain)上传保存
选择上传Profiles 文件
image.png
文件路径
/Users/apple/Library/MobileDevice/Provisioning Profiles/
这个一定要选对,如果选择错误,在打包的时候就会报签名有问题如果实在不知道是哪一个,可以先全都删除
image.png
然后在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

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png










网友评论