最近公司需要部署自动打包下载功能,我们客户端都是在windows下的,所以下面的部署都是以windows10环境下,jenkins可以很方便的完成。下面介绍一下我在部署过程中遇到的一些坑。
jenkins安装的问题:
1.安装官方教程:https://jenkins.io/zh/doc/pipeline/tour/getting-started/
2.Jenkins的详细安装及使用:https://blog.csdn.net/hc_ttxs/article/details/79384535
3.安装目录问题:
这个很闹心,我重装了3次,一次是因为有中文路径,一次是因为在有空格的路径下,使用bat命令时候识别不了,还有一次是因为装在C盘,svn checkout下来的时候会默认在jenkins下的workspace目录,会生成一个工程目录,把check的文件全部放到该文件下,我们工程30G+,一下撑爆C盘了,因此安装路径最好在文件大的磁盘根目录。
4.关于端口默认8080,可能会与tomcat或者别的部署冲突,如果想更改的话,在Manage Jenkins下的Configure System下更改。
5.maven教程:https://www.yiibai.com/maven/
6.关于jenkins的启动与暂停:
在C:\Windows\System32下使用管理员权限启动CMD.exe,然后切到jenkins目录下,
启动:jenkins.exe start
停止:jenkins.exe stop
重启:jenkins.exe restart
7.关于插件问题,这里记得安装完以后去Manage Plugins下查看,缺少会导致不正确。
8.关于Global Tool Configuration环境配置问题
jdk,unity3d这里主要是支持可以直接使用window commod打包的。
9.关于生成文件怎么下载的问题:
增加构建后操作即可,默认目录为jenkins/projectName/,这里下面如果报错可以忽略,因为你看你暂时还没生成文件,如果生成文件以后还显示报错,那么注意一下是否自己写的有问题了,
unity 命令行打包问题:
1.首先SDK环境,下载https://android-sdk.en.softonic.com/
这里建议安装所有版本的SDK,
2.unity环境配置:edit->preference->external tools->
JDK使用默认的,SDK是安装目录,
这里完成以后点击file ->build setting,选到android,然后先swich platform.这里可能会花一些时间,之后点击左下角的playersetting,
build system,internal不产生android工程,只打包apk,gradle会生成工程,下面可选,然后develop build选项是在生成的安装包安装后,可以连接profile,报错等,
打包不成功大多因为sdk的原因,可以在player setting下更改:
打android包需要数字签名:可以参考https://blog.csdn.net/weixin_42033401/article/details/81558183,这里不是我要讲的。
3.window .bat命令,生成android包:
cd /d %~dp0
set PROJ_TRUNK_DIR=%cd%
echo %PROJ_TRUNK_DIR%
cd /d %~dp0
taskkill /f /im unity.exe
"C:\Program Files\Unity\Editor\Unity.exe" -projectPath %PROJ_TRUNK_DIR%\PLD2019\ -quit -batchmode -executeMethod YH.ED.ProjectBuilder.BuildAndroid "development-true" -logFile "%PROJ_TRUNK_DIR%\build.log"
其实就是使用unity编译工程目录,执行方法:YH.ED.ProjectBuilder.BuildAndroid,记住一定要有命名空间,然后ProjectBuilder设置为public,BuildAndroid为静态方法,类创建在editor目录下。
4.代码设置:
public static void BuildAndroid()
{
//测试:默认使用ETC2的打包方式,同时作为贴图压缩格式不支持时的fallback
EditorUserBuildSettings.androidBuildSubtarget = MobileTextureSubtarget.ETC2;
EditorUserBuildSettings.androidBuildSystem= AndroidBuildSystem.Internal;
ExcecuteTools.ResetBuildScene();
//PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android, DefineCommand);
PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android, "RELEASE"); //目前Android打包默认打开同步日志开关,方便测试取出log进行比对。正式上线需要关闭
PlayerSettings.companyName = "xxx";
PlayerSettings.productName = "xxx";
PlayerSettings.Android.keystoreName = "xx.xx";
PlayerSettings.Android.keystorePass = "xx";
PlayerSettings.Android.keyaliasName = "x"x;
PlayerSettings.Android.keyaliasPass = "xxx";
PlayerSettings.applicationIdentifier = "xx.xx.xx.xx";
//PlayerSettings.SetScriptingBackend(BuildTargetGroup.Android, ScriptingImplementation.Mono2x);
PlayerSettings.Android.minSdkVersion = AndroidSdkVersions.AndroidApiLevel17;
PlayerSettings.Android.useAPKExpansionFiles = false;
PlayerSettings.graphicsJobs = false;
PlayerSettings.protectGraphicsMemory = true;
PlayerSettings.SetApiCompatibilityLevel(BuildTargetGroup.Android, ApiCompatibilityLevel.NET_4_6);
PlayerSettings.Android.targetArchitectures = AndroidArchitecture.ARMv7;
PlayerSettings.Android.androidIsGame = true;
PlayerSettings.SetManagedStrippingLevel(EditorUserBuildSettings.selectedBuildTargetGroup, ManagedStrippingLevel.Disabled);
string targetName = GetBuildTargetName(EditorUserBuildSettings.activeBuildTarget);
ApkName = ProjectPath + targetName;
if (targetName == null)
return;
BuildPipeline.BuildPlayer(GetBuildScenes(), ApkName, BuildTarget.Android, BuildOptions.Development);
}
上面的设置可以仿照去写。
5.执行:
直接在构建设置中执行window命令就好了。
balabala了这么多,只是想记住自己踩了这么多的坑,也警示一下大家,不要跟我犯一样的错误