长夜漫漫无心睡眠,来一篇嘿嘿。我相信如果已经用Shell脚本完成IOS和Android打包的朋友一定需要Jenkins
怎么才能让策划打包ipa和apk?怎么才能彻底省去程序的时间,只要在同一局域网内不需要unity的开发环境,只要它有浏览器,它就能打包Jenkins无疑是最佳选择。
Unity3D研究院之IOS全自动编辑framework、plist、oc代码(六十七)
Unity3D研究院之Android全自动打包生成apk(六十九)
首先要先找一个打包专用的电脑最为打包用的服务器,这电脑最好是MAC因为Windows不能打IOS的包。在这电脑上部署jenkins和Unity的开发环境,让Jenkins去执行我们写好的全自动打包shell脚本。同时Jenkins会生成一个局域网内部的可视化网站,这样让策划登录上去自己去执行打包的操作。
Jenkins的安装方式有两种
方式一:http://jenkins-ci.org/ 在官网上直接下载MAC的dmg安装包 安装完毕后即可在本机完成搭建jenkins的工作。但是jenkins不会用你本机的用户去构建,啥意思的就是jenkins不能打开unity,也调不了unity里面自己写的脚本方法。
http://blog.csdn.net/wirelessqa/article/details/8647771 可以按这篇文章的方法来解决。
#停止Jenkins
$ sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
# 修改group 和user
$ sudo vim +1 +/daemon +’s/daemon/staff/’ +/daemon +’s/daemon/bixiaopeng’ +wq org.jenkins-ci.plist
$ sudo chown -R bixiaopeng:staff /Users/Shared/Jenkins/
# 开始Jenkins
$ sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist
意思就是你要把org.jenkins-ci.plist里面的GroupName和UserName改成你自己的。
你可以在偏好设置里面。
然后就可以看到你的Group(群组)和UserName(账号名称) 我的Group就是 staff 我的 UserName就是 MOMO
补充:今天我升级了最近的苹果系统,还有最新的Jenkins发现修改了 userName和 groupName 重启jenkins以后 就打不开了。。注意 这里要修改一下文件夹的权限,不用改groupName也可以。
$ sudo chown -R userName /Users/Shared/Jenkins
$ sudo chown -R userName /var/log/jenkins
#重启Jenkins
$ sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist
还有一点我升级到了Unity5和Jenkins的最新版本,以前Unity4的时候在偏好设置里设置一下sdk的目录以后直接打包就行了。可是现在在U5里,即时是设置了目录,然而在调用jenkins打包的时候还是会无法识别这个目录,将会弹出窗口让你选择SDK目录。 我不知道这是不是unity的bug.但是作为全自动打包工具不能容忍这个啊。。
在你自动打包之前,强制设置sdk的目录就行了。 记住目录最前面一定要有”/”不然还是会报错。亲测这样做问题就可以解决。
EditorPrefs.SetString("AndroidSdkRoot","/Volumes/Mac-Tools/android-sdk-macosx");
方式二:用brew安装
执行 brew install jenkins 你会看到安装的一些信息。
等安装好以后在执行
java -jar /usr/local/opt/jenkins/libexec/jenkins.war
在浏览器里面打开 http://localhost:8080/ 局域网内别人可以打开http://”你的ip”:8080/
选择参数化构建过程,这里可以是增加一些让策划操作的选项。
然后增加构建步骤,选择Execute Shell 也就是执行Shell脚本。Command里面就是需要执行的脚本以及参数。/Users/MOMO/test.sh 就是shell脚本的在本机的全路径,$version就是在上图中把策划选择的版本号传递给shell脚本中。
选择Build with Parameters 右边选择一个版本号也就是上面我们配置的参数。 点击开始构建就OK了。构建完成后可以在下面选择Console Output来查看构建的完整Log
另外jenkins提供了账号系统,最好给用的人注册一下账号,不然谁都能http://”你的ip”:8080/ 这个页面点一点就不好了。
shell脚本
#!/bin/sh
echo "start"
#unityapp的路径
export untiy=/Applications/Unity4.5.1/Unity.app/Contents/MacOS/Unity
#项目路径
export projectPath=/Users/MOMO/TestUnity
#把所有=后面的参数取出来
for a in $*
do
r=`echo $a | sed "s/--//g"`
eval $r
done
#这里就可以拿到jenkins传递进来的参数了
echo "version = $version"
#打开unity3d 执行MyEditorScript.MyMethod 方法。
#unity产生log就写在tmp/1.log里面,比如Debug.Log和Unity编辑器产生的。
$untiy -quit -batchmode -projectPath $projectPath -logFile /tmp/1.log -executeMethod MyEditorScript.MyMethod "$version"
对应unity里面还有有接收shell调用的地方。MyEditorScrip这个类放在Editor目录下面即可。
using UnityEditor;
using UnityEngine;
class MyEditorScript
{
static void MyMethod ()
{
string executeMethod = "MyEditorScript.MyMethod";
foreach(string arg in System.Environment.GetCommandLineArgs()) {
Debug.Log(arg);
}
}
}
字码的差不多了。另外在shell脚本里面还可以用svn up svn ci 等命令来执行更新以及上传的操作,Jenkins都快用起来吧。
另外如果出现 ant command not found. 记得在jenkins 全局设置里面配置一下路径 ANDROID_SDK 是android的sdk目录,PATH 是ant的目录
- 本文固定链接: https://www.xuanyusong.com/archives/3349
- 转载请注明: 雨松MOMO于 雨松MOMO程序研究院 发表










请教一下:
mac 系统重启后(没有在 GUI 下登录桌面),导出 android 工程会一直卡在哪里,请问有遇到吗?或者有方向可以指点下怎么解决吗?
我的打不开unity,一直在那构建。也不保错。是什么问题啊
为什么 我安装都安装不了
为什么安装不了? 卡在哪里了
MOMO您好 请问一席 我在mac上搭建jenkins 修改了username 和groupname 之后 再重新启动的时候 就访问不进去localhost了 但是jenkins进程是启动成功的。请问???
$ sudo chown -R userName /Users/Shared/Jenkins$ sudo chown -R userName /var/log/jenkins我今天升级了也发现这个问题了。 这里要修改一下权限。
您好,我使用unity3D 插件,一直提示我无法找到,我的安装目录在D盘会有影响吗,还有我用ant的方式一直返回1的错误
雨松你好,我想问一下,这个自动打出来的apk包放在哪里啊?我log里面现实的是成功了。但是到处找不到生成的apk包
打包的时候不是要传一个路径么~~~
饿。。那个工作路径么
我这里从log上看都很正常。。你说的传路径是在配置文件里?还是在工程里?还是在editor的那个cs文件里?请指教
路径是在-xcode 或者是-ant 出来的啊~~~
u3d 安卓 NDK 那个例子下载后运行 找不到SO DllNotFoundException: xuanyusong
师傅为什么你家博文只有日期木有时间戳呢。
这个皮肤不带吧。。
MOMO,还想请教一个问题,我想在服务器端压缩json数据,然后在客户端通过www下载,然后再解压,请问这个如何实现?
可以用gizp来压缩。。 通讯很多游戏都用这个的。。
谢谢MOMO大侠,我已经用deflate搞定了。
MOMO,想请教一个问题,NGUI使用了动态字体后,有的时候点击界面,界面上的所有字就会全部闪一下,请问这个如何解决?
这个没遇到过。 你的字体是不是太大了?
你说的大指的是字体文件大小还是字体尺寸?
都是干货,支持
谢谢哈。。
MOMO,想请教一个问题!我这边想要做一个动态加载材质,想把场景的东西记录在XML里面,同时想记录材质下的贴图信息(不只是mainTexture,可能法线贴图),在Material对象下没有方法可以直接获取材质球下面的贴图序列,只能是通过nameID去获取单个贴图,我想要的是主动获取材质下的贴图信息,找不到解决方法。
能看到材质吗?
可以获取到材质对象,但是想记录材质对象下的贴图。
请问您写在wordpress里的那些代码是用的什么插件,感觉很不错啊
frontopen2
momo,现在你做的项目都有弄热更新吗
新项目要用。 在做研究。。。
那之前没用到的项目 要是有bug出现 的话 每次都发新包吗?
嗯 只能这样。
哈哈,我今天早上刚写了篇文章也是jenkins的。第一次接触持续集成的东西,被坑了两天时间。http://blog.csdn.net/langresser_king/article/details/41008321
不错。。支持~~~
最近才开始用mac,各种不习惯,momo有没有想刷成window的冲动
没有。。。。
开发神器啊,有空研究下
嗯哈。
哦,我知道了,MOMO,你给的链接是错误的说,呵呵
MOMO,现在为什么”Unity3D研究院之Android全自动打包生成apk(六十九)”打不开了?
能打开啊。。
69我也打不开啊!!!好焦急啊,momo
这个好啊,据说每分享一次就变帅一点,
我可没这技能哈哈哈。
这是奖励MOMO的附加技能。
分享都是好东西,顶~
谢谢哈。互相学习。。