首页 >Unity3D频道 >【Unity3D研究院之游戏开发】 > Unity3D研究院之Jenkins的使用(七十八)
2014
11-10

Unity3D研究院之Jenkins的使用(七十八)

长夜漫漫无心睡眠,来一篇嘿嘿。我相信如果已经用Shell脚本完成IOS和Android打包的朋友一定需要Jenkins

怎么才能让策划打包ipa和apk?怎么才能彻底省去程序的时间,只要在同一局域网内不需要unity的开发环境,只要它有浏览器,它就能打包Jenkins无疑是最佳选择。

Unity3D研究院之IOS全自动编辑framework、plist、oc代码(六十七)

Unity3D研究院之IOS全自动打包生成ipa(六十八)

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改成你自己的。

dHlwZT1mdyZzaXplPTcyMCZzcmM9YUhSMGNDVXpRU1V5UmlVeVJtbHRaeTVpYkc5bkxtTnpaRzR1Ym1WMEpUSkdNakF4TXpBNE1URXhOak01TURjeE1Eaz0=

你可以在偏好设置里面。

Snip20141109_3

然后就可以看到你的Group(群组)和UserName(账号名称) 我的Group就是 staff 我的 UserName就是 MOMO

Snip20141109_5

 

补充:今天我升级了最近的苹果系统,还有最新的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/

Snip20141109_6

选择参数化构建过程,这里可以是增加一些让策划操作的选项。Snip20141109_7然后增加构建步骤,选择Execute Shell 也就是执行Shell脚本。Command里面就是需要执行的脚本以及参数。/Users/MOMO/test.sh 就是shell脚本的在本机的全路径,$version就是在上图中把策划选择的版本号传递给shell脚本中。

Snip20141109_9

选择Build with Parameters  右边选择一个版本号也就是上面我们配置的参数。 点击开始构建就OK了。构建完成后可以在下面选择Console Output来查看构建的完整Log

Snip20141109_13Log在这里

Snip20141109_14

另外jenkins提供了账号系统,最好给用的人注册一下账号,不然谁都能http://”你的ip”:8080/ 这个页面点一点就不好了。

Snip20141110_15

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的目录

tmp2a3d7c54

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

Unity3D研究院之Jenkins的使用(七十八)》有 53 条评论

  1. 黄山哥说:

    打包提示没有NDK,环境变量配置了ANDROID_NDK_HOME和NDK两个都设置了,还是不行,是应该设置ANDROID_NDK_HOME还是设置NDK还是其他的呢?

  2. 网虫虫说:

    全局环境变量里 NDK是怎样添加的呀??

  3. 香菜君说:

    您好我在参数化构建中添加了字符参数PATH,在构建中 添加了 window批处理命令 来调用untiy的方法,其中这个方法是有参数的我想把PATH传入 方法中但是一直在报错,如果没有参数的化是对的,我的写法为:
    “D:\Program Files (x86)\Unity\Editor\Unity.exe” E:\Project\nba1_dev -quit -batchmode -executeMethod LuaTool.CreateAssetBundle %PATH%
    请问正确的写法应该是什么样的呢?

  4. xieliujian说:

    sudo vim +1 +/daemon +’s/daemon/staff/’ +/daemon +’s/daemon/bixiaopeng’ +wq org.jenkins-ci.plist 执行这条指令后,查看plist,发现属性没有被改变,是不是按照的时候要按照daemon

  5. xieliujian说:

    sudo vim +1 +/daemon +’s/daemon/staff/’ +/daemon +’s/daemon/bixiaopeng’ +wq org.jenkins-ci.plist这条指令无效,plist文件没有改变,是不是安装的时候daemon要勾选一下

留下一个回复

你的email不会被公开。 必填项已用 * 标注。