Jenkins iOS 打包环境跳坑记录

Jenkins 安装

本人使用的是 dmg 安装包,好处是会自己设置开机启动,并且关联 8080 端口。

下载方法很简单,打开 https://jenkins.io 找到下载,然后在下载页找对应平台就可以了。

我本人用的是 Java 10,但是 Jenkins 运行环境是 Java8。所以需要下载对应的 JDK。

安装完成后可以通过 /usr/libexec/java_home -v 1.8 获取到 Java 8 的路径。

使用 dmg 安装会在 /Library/Application Support/Jenkins 路径下生成一个 jenkins-runner.sh 文件。在这里可以配置 Jenkins 运行相关的参数。首先设置 JAVA_HOME export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home" 或者 JAVA_HOME=`/usr/libexec/java_home -v 1.8`

然后修改最后两行为(也不一定是最后,自己按实际情况对应)

echo "/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/bin/java" $javaArgs -jar "$war" $args
exec "/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/bin/java" $javaArgs -jar "$war" $args

然后就可以正常运行 Jenkins。 localhost:8080

概览

Jenkins 自身有一个 Xcode integration,最开始使用的这种方案,过程中遇到了许多不可描述的问题,也没有解决思路,所以放弃。

Jenkins 类似一个流程管理器,顺序排好了流程,每个流程会触发预设好的任务或者脚本等。因为可以执行脚本,所以这里最终选择了使用 xcodebuild 脚本化编译的方案。

因为使用的是测试工程,所以没有设置触发条件等。简单的流程为:首先拉取最新的仓库,然后执行定义好的脚本。(属实有点简单。。。)。

整个脚本如下:

cd hssdf;
path=`pwd`;
cd ../../../archives;
archivePath=`pwd`;
dataString=`date +%Y-%m-%d-%H-%M-%S`;
archivePath=`echo $archivePath/${dataString}.xcarchive`;
cd $path;
echo `pwd`;

/usr/bin/security unlock-keychain -p 123456 /Users/Shared/Jenkins/Library/Keychains/login.keychain-db

xcodebuild clean;
xcodebuild archive -allowProvisioningUpdates -project ./hssdf.xcodeproj -scheme hssdf -configuration Debug -archivePath $archivePath;
xcodebuild -archivePath $archivePath -exportArchive -exportOptionsPlist ./hssdf/export.plist -exportPath ~/

具体问题

最开始看到网上的教程为,拷贝 login.keychain 到 jenkins 用户对应的目录下。当时不清楚为什么,照做后出现不能签名的问题。

后来灵光一现(很重要的灵异现象,每跳过一个坑都靠它帮忙),拷贝的目的是为了获取开发证书和私钥。So。。。。生成 p12 然后在 jenkins 用户下安装。证书问题解决

你以为这样就解决问题了?naive!因为对 xcodebuild 这个命令不熟悉,就随后 man 了下,我了个乖乖,参数要翻好几页,还要比较清晰。然后噼里啪啦指定了一堆参数。然后悲剧来了,-target 和 -scheme 不能同时用,指定 -exportArchive 后必须同步要有 -exportOptionsPlist 各种不协调。。。。。 反正就是一副你猜参数怎么用的情况,想砸电脑有木有!!!奈何人穷电脑贵,还能怎么办,一个参数一个参数调呗。

等等 -exportOptionsPlist 是什么鬼?哼哼,xcodebuild -help 自己看吧

终于参数调完,你以为就能跑起来了吗?怎么可能!签名失败了解下。签名失败是什么鬼?于是各种谷歌百度、百度谷歌。所幸,搜索结果不是很多,但是情况千奇百怪每一个对的上的,我就跪了。

于是鬼使神差,试了下把编译命令直接放到终端运行。我擦,弹了个授权窗!我日!需要授权!!!擦擦泪,怎么把这茬给忘了。还有,没有授权用不了 keychai 你丫为啥不报错,为啥不报错!剩下的就很简单了 /usr/bin/security unlock-keychain -p 123456 这行命令了解下。

还要经过一下午的奋斗,这个流程终于跑通了。

为了表示开心 -exportOptionsPlist 文件贴出来做个参考



<plist version="1.0">
<dict>
    <key>teamIDkey>
    <string>你的 team idstring>
    <key>signingStylekey>
    <string>automaticstring>
    <key>methodkey>
    <string>developmentstring>
dict>
plist>

收工

来瓶零度庆祝下

你可能感兴趣的:(iOS,脚本)