iOS自动化打包分发
为什么要自动化
- 节省时间,快速迭代: 减少重复繁琐的过程,本地继续编码,使用工具自动拉取远程库代码后打包
- 纠错: 打包出错,会自动查找到编译错误
- 快速分发多个版本: 配置好不同分支的打包策略,可以将打包任务移交测试,分工更明确
工具
- Jenkins CI
- Flow CI
- Travis CI
- Hudson CI
- Circle CI
本文只关注 Jenkins 的使用
Jenkins 的三种安装方式
- war
- pkg
- homebrew
推荐使用 homebrew
jenkins 安装
1、正确安装Homebrew的方式
2、安装: brew install jenkins
3、终端启动命令: jenkins
4、浏览器访问jenkins地址: http://localhost:8080/ , 如果不能正常访问,要么Java环境出问题,要么jenkins没有启动; Java环境的去官网下载最新的jdk安装;jenkins开关命令
5、 正常的浏览器启动页面是如下的
浏览器启动页面
根据提示修改文件夹权限,获取密钥,登录jenkins
6、安装插件 ,Jenkins功能很多以来相应的插件,简化了接入的难度
最好先跳过这一步,因为电脑环境问题,有些插件是需要翻墙安装,所以导致jenkins安装插件的时候,会卡在一个地方,然后就一直卡着,我安装过多次jenkins,因为这个问题,我习惯于跳过插件安装,先登录配置好环境,然后再手动安装插件!!!!!!!!!
install plugins
如果出现一只卡死在安装插件的界面,关机重启,重新启动Jenkins后,登录http://localhost:8080 进入管理员注册页面
7、 管理员注册
要牢记这个名称,如果是自己测试用,直接用 admin admin 这种更简单的组合.
管理员注册
8、 进入首页,首先将需要安装的插件 再次补充全
补全插件
需要的插件如下
-
Git,Gitlab,SVN,SSH Credentials用于授权后拉取远程库的代码 -
Keychains and Provisioning Profiles Management: 证书与描述文件的管理 -
Xcode integrationXcode打包的插件,所以iOS的打包只能部署在Mac系统 -
Cocoapods如果项目使用了cocoapod插件 来获取依赖库 -
Mailer Plugin用来发送通知邮件 -
fir-plugin用来将ipa包分发到fir.im上面,或者使用蒲公英(只能是脚本)也可以 -
Post-Build Script Plug-in脚本插件
9、配置项目的访问ssh私钥
SSH-private-key
根据图上的路径
SSH
添加SSH的私钥, 一般你项目的访问私钥是 ~/.ssh/id_rsa 这个文件,如果没有配置,则询问你的源代码的管理员
id_rsa
如果私钥是错误的,则配置项目的时候会出现下面👇的错误
wrong private key
所以务必要明白,项目的私钥是如何配置的. 需不需要口令码!!!
如果是公司项目,询问运维,当然一般运维会搭建jenkins(iOS必须要在Mac电脑上面搭建,如果是给JAVA使用,一般用linux,不能打包iOS).
自己的项目,不论是在Coding,Github,Gitlab 都可以在页面上查找对应的SSH添加,以明确将要在jenkins使用的ssh私钥是什么
10、配置项目依赖的证书与描述文件
login key
进入后的界面是
upload login-keychains
主要有两个步骤,
①是 上传钥匙串的 login.keychain , mac地址~/Library/Keychains/
login-keychains location
② 设置参数
login-keychains password
注意 证书的名称就是本机钥匙串,安装后的证书简介的 常用名称
common name
描述文件的地址 一般是 ~/Library/MobileDevice/Provisioning Profiles
不过我多次尝试 发现配置项目的时候 并没有得到描述文件,后面只能用脚本自己打包的
11、创建新的项目
new job
选择项目的类型
new job setting
进入项目的配置页面
configuration
all setting items
丢弃旧的构建 ,可以自己定义策略
drop old builds
设置 源码的 拉取, 这一步 主要是可能卡在 私钥的配置上面,所以一定要明确SSH的配置(见上面的说明)
fetch origin code
构建触发器 , 这里主要是 定时去 自动化打包项目
triger
构建环境, 主要配置的是 证书与描述文件
keychain
下面是正确的环境链接在此,我不知道是不是xcode8之后才有的这问题,还是我使用homebrew确实获取不到.
others keychains
Xcode的配置
Xcode
具体配置
Xcode build settings
钥匙串 选择配置好的钥匙串
Xcode code sign
其他的编译打包参数 , 如果使用了cocoapods还需要指定具体的一些参数,并且执行脚本,拉取依赖的远程库
Xcode Project setting
最最重要的来了,打包的脚本
build shell
如果使用了 cocoapods 则需要提供拉取依赖库的代码 否则请忽略这一步(比如我们叮叮暂时没有)
分别是 指定这是一个脚本(截图有问题,应该是#bin/bash -l), podfile文件的 中文格式编码, 切换到podfile的路径下,拉取依赖的pod
pod shell
archive build
具体的代码如下
脚本① 样本 xcodebuild -workspace "demo.xcworkspace" -sdk iphoneos -scheme "targetName" -configuration 'Release Adhoc' CODE_SIGN_IDENTITY="keychain中证书代号名称" SYMROOT='$(PWD) 这里 -workspace "demo.xcworkspace"是使用cocoapods的样本, 没有使用就像下面的 -project "project的路径"
if [ -d "${WORKSPACE}/builds" ]; then rm -rf ${WORKSPACE}/builds; fi;
mkdir ${WORKSPACE}/builds;
if [ -d "${WORKSPACE}/builds/${BUILD_NUMBER}" ]; then rm -rf ${WORKSPACE}/builds/${BUILD_NUMBER}; fi;
mkdir ${WORKSPACE}/builds/${BUILD_NUMBER};
xcodebuild -project ${WORKSPACE}/ProjectName/ProjectName.xcodeproj
-scheme "ProjectName"
-sdk iphoneos
archive -archivePath ${WORKSPACE}/builds/${BUILD_NUMBER}/archive
CODE_SIGN_IDENTITY="iPhone Developer: xxxx"
注意 scheme 一定还要勾选 分享
scheme of project
share scheme
并且注意 不同的打包method 要对应好.
脚本② xcodebuild官方文档
xcodebuild -exportArchive
-archivePath ${WORKSPACE}/builds/${BUILD_NUMBER}/archive.xcarchive
-exportOptionsPlist ${WORKSPACE}/ProjectName/ProjectName/ExportOptions_development.plist
-exportPath ${WORKSPACE}/builds/${BUILD_NUMBER}/${JOB_NAME}_${BUILD_NUMBER}.ipa
PROVISIONING_PROFILE="iPhone Developer: xxxx"
这里有一个注意点 就是 exportOptionsPlist ,需要自己在项目中配置 相应的信息
exportOptionsPlist
一切顺利就可以正常打包了
后面就是打包后 上传到 fir.im或者是蒲公英 给测试团队 .
fir.im plugin
还有就是 邮件通知
email plugin
12、 正常使用
build by hand
点击进入控制台输出,查看运行的细节
log
团队的使用
1、 设置一个 局域网的固定访问地址
custom jenkins url
公司内其他同事就可以通过这个地址,访问jenkins 自己去配置项目,进行打包
2、 设置jenkins运行电脑的安装工作目录 为 分享目录












网友评论