Jenkins调用Unity 进入ResLoadPrgSVN工程,在工程的父目录内,先将之前需要创建的文件夹创建好。
首先是“AssetBundle”文件夹,然后是“BuildTarget”文件夹,在里面新建“Android”、“IOS”和“Windows”文件夹
最后是Data文件夹,在其中新建Excel和Reg文件夹
进入Unity工程,修改BuildApp
脚本,在里面添加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 #region 打包机调用打包PC版本 public static void BuildPC () { BundleEditor.Build(); string abPath = Application.dataPath + "/../AssetBundle/" + EditorUserBuildSettings.activeBuildTarget.ToString() + "/" ; DeleteDir(m_WindowsPath); Copy(abPath, Application.streamingAssetsPath); string dir = PlayerSettings.productName + "_" + EditorUserBuildSettings.activeBuildTarget.ToString() + string .Format("_{0:yyyy_MM_dd_HH_mm}" , DateTime.Now); string name = string .Format("/{0}.exe" , PlayerSettings.productName); string savePath = m_WindowsPath + dir + name; BuildPipeline.BuildPlayer(FindEnabledEditorScenes(), savePath, EditorUserBuildSettings.activeBuildTarget, BuildOptions.None); DeleteDir(Application.streamingAssetsPath); WriteBuildName(dir); } #endregion static void WriteBuildName (string name ) { FileInfo file = new FileInfo(Application.dataPath + "/../buildname.txt" ); StreamWriter sw = file.CreateText(); sw.WriteLine(name); sw.Close(); sw.Dispose(); } }
修改Jenkins调用Unity3D的参数
1 -projectpath %WorkPath% -quit -batchmode -executeMethod BuildApp.BuildPC -logFile "E:\unity3dJenkins.txt"
Jenkins调用360Zip压缩 回到Jenkins,修改构建的配置,在Build Steps里面,添加Execute with Windows batch command
1 2 3 4 5 6 7 @echo off for /f "delims= " %%i in (%WorkPath%\buildname.txt) do set name=%%i c: cd C:\Program Files (x86)\360\360zip call 360zip.exe -ar "%WorkPath%\BuildTarget\Windows\%name%" "%WorkPath%\BuildTarget\Windows\%name%.zip" exit 0 pause
这里使用360Zip,Jenkins可能会报错,暂时先作为记录
Jenkins调用WinRAR压缩 如果使用360Zip报错,这里是WinRAR的控制台调用方法
1 2 3 4 5 6 @echo off for /f "delims= " %%i in (%WorkPath%\buildname.txt) do set name=%%i c: cd C:\Program Files\WinRAR Winrar.exe a -r -ep1 "%WorkPath%\BuildTarget\Windows\%name%.rar" "%WorkPath%\BuildTarget\Windows\%name%" pause
Jenkins归档 Jenkins压缩游戏包成功后,可以自动把压缩好的包归档,我们继续修改构建的配置
选择“构建后操作”——“Archive the artifacts”
在其中填入
1 BuildTarget\Windows\*.zip
然后点击“高级”,勾选上“只有构建成功时归档”、“使用默认的排除”、“包含和排除模式大小写敏感”
Jenkins归档位置 我们在Jenkins安装时,修改了Jenkins的工作空间,我们进入修改后的工作空间“E:\JenkinsWorkspace”,然后进入“Jobs”文件夹,从里面找到构建的工程,在工程目录内就能找到“builds——从里面能找到构建的编号——编号里面能找到archive文件夹——文件夹内就是归档的压缩包”
Jenkins添加部署参数 Jenkins自动构建时,Unity也可以读取到Jenkins配置的参数,比如说版本号、产品名称等。
我们修改Jenkins构建的配置,在General——This Project is Parameterized里面,添加几个新的参数
String Parameter
Name:Version
Default Value:0.1
Description:版本号
String Parameter
Name:Build
Default Value:0
Description:Build次数
String Parameter
Name:Name
Default Value:ResLoadPrg
Description:产品名称
Boolean Parameter
Name:Debug
Default Value:false
Description:是否是调试版本
接下来,我们在Build Steps——Invoke Unity3D Editor中,将这些参数设置在命令行里即可
1 -projectpath %WorkPath% -quit -batchmode -executeMethod BuildApp.BuildPC Version=$Version Name=$Name Build=$Build Debug=$Debug -logFile "E:\unity3dJenkins.txt"
这里的Version=$Version
里面的美元符号也是取值的意思
Unity读取Jenkins Unity设置Jenkins参数中间类 我们在Unity的BuildApp
脚本中添加中间类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public class BuildSetting { public string Version = "" ; public string Build = "" ; public string Name = "" ; public bool Debug = false ; }
在BuildApp
中添加解析BuildSetting
和设置工程的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 static BuildSetting GetJenkinsPCBuildSetting (){ string [] cmdArgs = Environment.GetCommandLineArgs(); BuildSetting buildSetting = new BuildSetting(); foreach (string arg in cmdArgs) { if (arg.StartsWith("Version" )) { var tempParam = arg.Split(new string [] {"=" }, StringSplitOptions.RemoveEmptyEntries); if (tempParam.Length == 2 ) { buildSetting.Version = tempParam[1 ].Trim(); } } else if (arg.StartsWith("Build" )) { var tempParam = arg.Split(new string [] { "=" }, StringSplitOptions.RemoveEmptyEntries); if (tempParam.Length == 2 ) { buildSetting.Build = tempParam[1 ].Trim(); } } else if (arg.StartsWith("Name" )) { var tempParam = arg.Split(new string [] { "=" }, StringSplitOptions.RemoveEmptyEntries); if (tempParam.Length == 2 ) { buildSetting.Name = tempParam[1 ].Trim(); } } else if (arg.StartsWith("Debug" )) { var tempParam = arg.Split(new string [] { "=" }, StringSplitOptions.RemoveEmptyEntries); if (tempParam.Length == 2 ) { bool .TryParse(tempParam[1 ], out buildSetting.Debug); } } } return buildSetting; } static string SetPCSetting (BuildSetting buildSetting ){ string suffix = "_" ; if (!string .IsNullOrEmpty(buildSetting.Version)) { PlayerSettings.bundleVersion = buildSetting.Version; suffix += buildSetting.Version; } if (!string .IsNullOrEmpty(buildSetting.Build)) { PlayerSettings.macOS.buildNumber = buildSetting.Build; suffix += "_" + buildSetting.Build; } if (!string .IsNullOrEmpty(buildSetting.Name)) { PlayerSettings.productName = buildSetting.Name; } if (buildSetting.Debug) { EditorUserBuildSettings.development = true ; EditorUserBuildSettings.connectProfiler = true ; suffix += "_Debug" ; } else { EditorUserBuildSettings.development = false ; } return suffix; }
最后,在BuildApp
中再次修改BuildPC
方法,调用上面的方法并缩减生成的包的后缀
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 #region 打包机调用打包PC版本 public static void BuildPC () { BundleEditor.Build(); BuildSetting buildSetting = GetJenkinsPCBuildSetting(); string suffix = SetPCSetting(buildSetting); string abPath = Application.dataPath + "/../AssetBundle/" + EditorUserBuildSettings.activeBuildTarget.ToString() + "/" ; DeleteDir(m_WindowsPath); Copy(abPath, Application.streamingAssetsPath); string dir = PlayerSettings.productName + "_PC" + suffix + string .Format("_{0:yyyy_MM_dd_HH_mm}" , DateTime.Now); string name = string .Format("/{0}.exe" , PlayerSettings.productName); string savePath = m_WindowsPath + dir + name; BuildPipeline.BuildPlayer(FindEnabledEditorScenes(), savePath, EditorUserBuildSettings.activeBuildTarget, BuildOptions.None); DeleteDir(Application.streamingAssetsPath); WriteBuildName(dir); } static BuildSetting GetJenkinsPCBuildSetting (){ } static string SetPCSetting (BuildSetting buildSetting ){ } #endregion
Jenkins Debug 打包失败后,仔细阅读控制台的输出内容。
如果是执行的bat出错,可以自行制作一个bat双击运行试试。
如果是Unity方法出错,那就 进入Unity环境来自行运行方法。