解决Linux服务器上的Jenkins无法构建Xcode工程
前言
由于Linux服务器无法安装Xcode,所以Jenkins无法通过shell来调用xcodebuild、xcrun等命令来构建Xcode工程,因此无法持续集成,敏捷开发。下面介绍一种配置Jenkins节点的方式,来实现Linux上的Jenkins构建Xcode工程,并上传ipa到蒲公英pgyer来进行测试。
一、配置MacOS Slave
Jenkins有个强大的功能,配置Slave(奴隶)服务器,来实现分布式部署构建。具体步骤如下:
1. 配置Mac电脑。
在系统偏好设置 > 共享 中开启 远程登录,如下图:
2. 创建节点。
Jenkins > 系统管理 > 管理节点 > 新建节点,输入节点名称,记得勾选 Permanent Agent
,点击OK。
3. 配置节点。
其中要保证/User/Shared/Jenkins/
目录的权限为ssh链接的用户可读写。
Host是Mac的ip地址,Credentials是ssh登录Mac时需要的账户和密码。可以添加一个
下面的部分很重要:
PATH环境变量,需要在Mac上通过
echo $PATH
/opt/iOSOpenDev/bin:/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/local/bin:/opt/local/sbin/
获取,然后copy过去。
Keychains and Provisioning Profiles路径要填写正确。没有这个选项的安装Keychains and Provisioning Profiles Management插件。
4. 最后保存。
如果看到
即添加Mac Slave成功,且Mac Slave在线。若连不上,请反复确认远程工作目录的权限。
二、配置Jenkins系统设置。
1. 上传证书和描述文件。
在 Jenkins > 系统管理 > Keychains and Provisioning Profiles Management中上传打包用的证书和描述文件。如下图:
保存。
2. 在 Jenkins > 系统管理 > 系统设置(全局设置)中设置:
很关键。Keychain的路径和密码需要填写Mac中登录用户的密码。
3. 在 Jenkins > 系统管理 > Configure Global Security 中配置:
开启Safe HTML。
三、配置iOS项目。
1. 安装插件。
安装 build-name-setter
、description setter plugin
插件。
2. Jenkins > 新建。
3. General.
这里添加了参数化构建过程,为了在每次Build时,可以填写更新说明,所以这里天添加了名为News
的参数,当用户构建时填写了内容,可以在之后的脚本中通过${News}
来获取News
的值。
这里指定Mac Slave服务器作为构建Xcode工程的Slave服务器,Xcode打包构建全部交给这个节点(Slave服务器)来完成。
4. 源码管理。
这里填写本地或者远程的代码仓库(如gitlab或者git)。下面的Branch填写指定分支。
5. 构建触发器。
这里暂时不设置,设置了可以自动化测试,和其他脚本配合使用。
6. 构建环境。
把之前上传的证书和描述文件添加上。
设置Build名称,这里添加了自定义名称。注意,高级里面只勾选第一个,不要勾选 Set build name after build ends
,否则会报错。
7. 构建
这里使用的脚本。
export LANG="en_US.UTF-8"
security -v unlock-keychain -p "yourpassword"
ipa_name="URWork_iOS_beta"
build_path="${WORKSPACE}/build/"
fastlane gym --workspace URWorkClient.xcworkspace --scheme URWorkClient --clean --configuration Beta --export_method ad-hoc --output_name ${ipa_name} --output_directory ${build_path}
curl -F "file=@${build_path}${ipa_name}.ipa" \
-F "uKey=yourUKey" \
-F "_api_key=yourApiKey" \
-F "updateDescription=${News}" \
https://www.pgyer.com/apiv1/app/upload
最重要、最重要、最重要:
Linux服务器上的Jenkins调用Mac Slave时,是通过之前设置的SSH登录的方式,而Apple为了安全,在ssh登录时,是不允许读取Keychains(钥匙串)的,所以 security -v unlock-keychain -p "yourpassword"
这行命令就很重要了。在构建打包前,先解锁Keychains。
当然这里 fastlane 已经提前通过Homebrew安装好了,这里不再赘述。
整体脚本的流程是,先解锁Keychain,然后用fastlane快速打包,最后上传到蒲公英平台,等待测试。
8. 构建后操作。
附代码:
更新说明:
${News}
点击跳转到下载页![](http://upload-images.jianshu.io/upload_images/5912049-8dc3cdb1c798b7e3?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
构建完成后,把之前用户输入的更新说明以及蒲公英下载地址和二维码通通显示在Build Description中。
四、整体测试
1. 打开Jenkins。
2. 点击develop_iOS。
3. 点击Build with Parameters.
4. 开始构建。
5. 等待构建完成即可。
这里也可以查看构建进度:点击最新的一次构建
点击Console Output
在这里可以查看一些日志,如果出错了,也可以在这里查询。
五、总结。
使用Jenkins打包Xcode工程整体过程很曲折,坑很多,按照这些来,可能还会遇到一些问题,附上一些链接,以供参考。
附
- Jenkins+ Xcode+ 蒲公英 实现IOS自动化打包和分发
- 手把手教你利用Jenkins持续集成iOS项目
- Jenkins签名问题
- 使用 Jenkins 实现持续集成 (iOS)
- 使用 Jenkins 实现持续集成 (Android)