本人使用的是 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>
来瓶零度庆祝下