对于一个开发来讲,Xcode手动打包是比较耗时的,而且是没有很大技术含量的工作。自动化打包根本目的是为了节约时间,把重复且无技术含量的事情交给系统去做。下面我介绍jerkins实现自动打包方案:
什么是Jenkins
Jenkins 是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。同时 Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。
Jenkins的安装
Jenkins配置
安装完成之后,在浏览器中输入http://localhost:8080 就会进入Jenkins启动页面
找到Jenkins安装的目录,在Jenkins目录下/Home/secrets/initialAdminPassword这个目录,打开initialAdminPassword然后把密码复制出来粘贴到这里输入框
点击继续进入这个页面,点击建议安装的插件(默认左边这个选项)
然后就耐心的等待插件的安装
再然后就是创建第一个管理账户,就按着提示一步步走下来,这样就初始化配置完成了。

Jenkins配置插件
接下来就可以配置Jenkins常用到的插件了,选择系统管理-》插件管理-》可选插件。 安装GitLab插件["GitLab Plugin"、"Gitlab Hook Plugin"]和Xcode插件["Xcode integration"]
注意:有个重要的插件需要安装,安装[Keychains and Provisioning Profiles Management],但是这个最新版本的Jenkins安装完这个插件后,选择了文件点击upload一直没有反应是个Bug,需要在安装jerkins版本的时候选择旧版的安装,具体可以参看这篇文章:Mac Jenkins环境搭建
当jerkins插件都安装完毕后,需要重启jerkins,然后才能使用刚安装的插。 重启完成之后,点击系统管理,滚动到页面最下方,发现了【Keychains and Provisioning Profiles Management】这个插件
Keychains and Provisioning Profiles Management插件配置
- Keychains文件目录在~/Library/Keychains,注意找到后需要把文件复制一份改成后缀名**.keychain** ,因为插件不允许上传后缀是keychain-db 文件。Description这个可以自定义,然后打开钥匙串,找到开发者证书,把名字复制出来粘贴在Code Signing Identity选项里。
- Provisioning Profiles文件目录是:~/Library/MobileDevice/Provisioning Profiles,找到对应项目的描述文件上传。
这样就配置好了证书和描述文件
安装完了这个,我们就可以配置一个构建项目了。
Jenkins的使用
创建任务
配置一下General参数
配置源码管理
打开自己的项目,复制项目链接填入Repository URL,然后点击Credentials右边的添加,主要是为了拉取项目使用,会展示出下图所示。有两种选择,使用账户密码或者使用SSH
添加完之后会自动检查你添加的凭证是否正确,错误是会有报错信息的
提示:关于怎么配置SSH,首先检查是否配置过SSH,在终端执行命令 ls -al ~/.ssh,会存在以下两种情况:
- 如果配置过会输出id_rsa 和 id_rsa.pub,则证明配置过;
- 如果没有配置过,则执行命令ssh-keygen -t rsa -C "[email protected]",就会生成id_rsa 和 id_rsa.pub文件;
直接在终端输入vim ~/.ssh/id_rsa.pub,把输出的内容复制到gitLab配置SSH,在上面配置凭证那里也添加一下。
构建触发器这个配置项假如有需求的,可以根据自己的需求进行配置
设置构建环境
iOS打包需要签名文件和证书,所以我们勾选“Keychains and Code Signing Identities”和“Mobile Provisioning Profiles”。上面已经配置过这个插件的内容了,会自动填充相应的内容
设置构建,有两种选择:
使用脚本构建,增加Shell脚本
#!/bin/sh -l
#项目名
TARGET_NAME="TestDemo"
#证书
CODE_SIGN_DISTRIBUTION="XXXXX"
#info.plist路径
project_infoplist_path="./${TARGET_NAME}/Info.plist"
#取版本号
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")
#取build值
bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}")
#获取时间
DATE="$(date +%Y%m%d)"
IPANAME="${TARGET_NAME}_V${bundleShortVersion}_${DATE}.ipa"
#要上传的ipa文件路径,这里我将ipa包放在用户目录下的archive文件夹中
IPA_PATH="$HOME/archive/${IPANAME}"
echo ${IPA_PATH}
echo "${IPA_PATH}">> text.txt
#获取权限,这个是电脑密码›
security unlock-keychain -p "XXXXX" $HOME/Library/Keychains/login.keychain
# //下面2行是没有Cocopods的用法
# echo "=================clean================="
# xcodebuild -target "${TARGET_NAME}" -configuration ‘Debug’ clean
# echo "+++++++++++++++++build+++++++++++++++++"
# xcodebuild -target "${TARGET_NAME}" -sdk iphoneos -configuration 'Debug' CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" SYMROOT='$(PWD)'
#//下面2行是集成有Cocopods的用法
echo "=================clean================="
xcodebuild -workspace ${project_scheme}.xcworkspace -scheme "${TARGET_NAME}" -configuration 'Debug' clean
echo "+++++++++++++++++build+++++++++++++++++"
xcodebuild -workspace ${project_scheme}.xcworkspace -scheme "${TARGET_NAME}" -sdk iphoneos -configuration 'Debug' CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" SYMROOT='$(PWD)'
#//打包输出ipa
xcrun -sdk iphoneos PackageApplication "./Debug-iphoneos/${TARGET_NAME}.app" -o ${IPA_PATH}
#上传到蒲公英
uKey="XXXXXX"
#蒲公英上的API Key
apiKey="XXXXXX"
#蒲公英版本更新描述,这里取git最后一条提交记录作为描述
pgyer_desc=`git log -1 --pretty=%B`
#要上传的ipa文件路径
echo $IPA_PATH
#执行上传至蒲公英的命令
echo "++++++++++++++upload+++++++++++++"
curl -F "file=@${IPA_PATH}" -F "uKey=${uKey}" -F "_api_key=${apiKey}" -F "buildUpdateDescription=${pgyer_desc}" http://www.pgyer.com/apiv2/app/upload
#通知钉钉@对应的同学,同样通知到企业微信也是可以的
qrUrl="上传蒲公英包的URL"
#对应钉钉的链接
curl 'https://oapi.dingtalk.com/robot/send?access_token='
-H 'Content-Type: application/json'
-d '{
"msgtype": "markdown",
"markdown": {
"title":"新包",
"text": "#### iOS新包 \n > \n > "
},
"at": {
"atMobiles": [
"艾特谁填写谁的手机号码"
]
}
}'
echo -e "\n UPLOAD TO PGYER SUCCEED \n"
复制代码
使用Xcode进行构建
项目使用了cocoapods管理第三方库,所以先需要增加了构建脚本shell。记得一定要加pod前面的语句,不然pod语句会出错。
#bin/bsah - l
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
cd $WORKSPACE/TestDemo
/usr/local/bin/pod update --verbose --no-repo-update
复制代码
接下来添加xcode构建工具,首先配置General build settings
配置Code signing & OS X keychain options
配置Advanced Xcode build options
关于插件上传蒲公英的文档:www.pgyer.com/doc/view/je…
然后保存,点击构建
构建过程中出现的问题可以参考:www.jianshu.com/p/8b2fc2da0…
至此完成了一整套的构建流程
一般这样配置完就可以成功打包了,在整个配置过程中,都不能粗心大意的随意设置。这就是整个的打包过程,欢迎大家提出更好的改进意见和建议。