Unity工程Jenkins配置笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Piao_Polar/article/details/75007886

Unity工程Jenkins配置笔记

Unity工程文件量大,耗时久,在本地出版本代价很大,及早使用Jenkins等自动编译系统在远程一键/定时编译就很有意义。

1. 考虑到iOS的编译过程相对复杂,先在本地的Mac系统上搭建一个CI的环境来测试

2. 新建一个测试工程

新建一个测试工程

由于是新环境,选构建自由风格的软件项目即可,如果是正式环境,可以拷贝一个之前既有的项目基础上来更改,最下面有一个Copy from,填写模板工程的名字即可

3. 源码管理需要各种版本管理插件的支持,从这里进去添加

这里写图片描述

比如Perforce的插件名为P4 Plugin,Git的插件名为Git plugin

此外我们编译Unity工程,需要用到Unity3d plugin这个插件,这个插件还需要额外设置,在Global Tool Configuration中,设置一下路径

这里写图片描述

4. 考虑到实际项目很大,不利于测试,我在本地新建了一个Unity的极简工程来测试整个流程,放在本地的git管理中。
到本地测试P4项目的时候,可以改成下面的Perforce的或者其他SCM,用户名密码源码地址之类的,直接通过Add来添加Credentials都一目了然

这里写图片描述

5. Unity的iOS版本想要生成XCode工程,这里就用到了上述的Unity插件来处理

这里写图片描述

其中参数格式为
-quit -batchmode -projectPath $WORKSPACE/[Unity工程相对源码root的相对路径] -executeMethod [编译类名,编译方法名]

BuildProject.cs 可参考 https://gist.github.com/piaopolar/43b6301394c8eb9979775751799de866,注意要放置在 Assets\Editor\ 目录下

由于CI默认以daemon模式运行,可能会遇到权限问题,可以参考这篇文章处理
http://blog.csdn.net/wirelessqa/article/details/8647771
关键的要点可以总结为:
修改 org.jenkins-ci.plist 中的groupName和userName,使得CI可以有更高的权限
由于之前当前的CI目录都是属于jenkins的,要对目录更新权限,并重启CI使之可用
后面发现貌似重启以后就无法使用了(localhost:8080无法访问),用pkg重装后权限被更新了,改完权限,要么无法启动,要么启动后之前的数据全丢了。
解决过程如下:
从 org.jenkins-ci.plist 中看到shell脚本,于是直接在命令行中运行, /Library/Application\ Support/Jenkins/jenkins-runner.sh
然后报错 The domain/default pair of (/Library/Preferences/org.jenkins-ci, JENKINS_HOME) does not exist,于是在shell中执行 export JENKINS_HOME=”/Users/Shared/Jenkins/Home”
再不行就在sh中直接写上这个路径,然后报错 Exception in thread “main” java.io.IOException: Jenkins has failed to create a temporary file in /Users/Shared/Jenkins/tmp
直接新建这个文件夹即可 mkdir /Users/Shared/Jenkins/tmp
然后可能会报错 Caused by: java.net.BindException: Address already in use,应该是之前没完全关闭导致端口被占用了,关闭服务再开,或者直接重启就好

6. 如果一切顺利,执行到这里,已经在相应目录(见BuildProject.cs中的locationPathName)生成XCode工程了,然而若是直接用XCode打开这个工程,会发现是无法打包的。
这是由于Unity生成的工程使用了Automatically manage signing。而这个是不能用于我们的企业版证书的。所以我们要对工程文件进行一下改造

sed -i '' 's/ProvisioningStyle = Automatic;/ProvisioningStyle = Manual;/' $WORKSPACE/UnityProject/Main/Build/iOS/Unity-iPhone.xcodeproj/project.pbxproj

有时候会发现 bitcode 默认YES也是个问题,可以同理修改

sed -i '' 's/ENABLE_BITCODE = YES;/ENABLE_BITCODE = NO;/' $WORKSPACE/UnityProject/Main/Build/iOS/Unity-iPhone.xcodeproj/project.pbxproj

正式使用xcodebuild编译前需要解锁系统的钥匙串

security -v unlock-keychain -p $OSX_PASSWORD ~/Library/Keychains/login.keychain

在正式调用xcodebuild来进行编译之前,我们要确保CI执行的机器上,安装好了相应的证书和Provisioning文件。(通常双击相应的p12和Provisioning文件即可)
然后正式调用xcodebuild即可

这里写图片描述

脚本 xcode_builder.py 实际真正重要的代码即以下两个命令行

xcodebuild archive -project $WORKSPACE/UnityProject/Main/Build/iOS/Unity-iPhone.xcodeproj -scheme Unity-iPhone -configuration Release -archivePath $WORKSPACE/UnityProject/Main/Build/iOS/App.xcarchive DEVELOPMENT_TEAM=XXXXXXXXXX PROVISIONING_PROFILE=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx CODE_SIGN_IDENTITY='iPhone Distribution'
xcodebuild -exportArchive -archivePath $WORKSPACE/UnityProject/Main/Build/iOS/App.xcarchive -exportPath $WORKSPACE/UnityProject/Main/Build/iOS -exportOptionsPlist $WORKSPACE/Automation/Builds/xcode_export.plist

其中,DEVELOPMENT_TEAM/PROVISIONING_PROFILE/CODE_SIGN_IDENTITY 的数值,可以手动在XCode中修改后,比对.xcodeproj文件得到
而xcode_export.plist是个简单的配置文件,可参考https://gist.github.com/piaopolar/fc06b850e703f6ace7ce22aee16f608f

顺利的话,执行完成后,ipa也就编译出来了。

7. 问题排查和调试
如果中间过程遇到问题,可以通过

这里写图片描述

找到响应报错的操作,在本地执行排查,直到能正常到下一步后再更新配置重新运行,能节省不少时间。

猜你喜欢

转载自blog.csdn.net/Piao_Polar/article/details/75007886
今日推荐