如何搭建Jenkins匯出Unity安卓環境
阿新 • • 發佈:2018-12-22
前言
早早去公司上班,老大經常會叫我出一個demo的包,我就想起來可以配置一個打包工具,讓他隨時想要一個執行包就可以自己打包看效果,就想起來可以配置一個Jenkins打包環境。這樣在同一個區域網內不需要Unity開發環境,就只要瀏覽器開啟Jenkins然後點選打包即可。
準備工具
- 準備Jenkins環境,可以選擇去Jenkins官網下載,我這裡準備了一個Jenkins的war包。
搭建步驟
- 首要前提本地Unity已經安裝好Unity Android的打包環境,確保能夠正確的用Unity匯出Android apk包,這裡就不過多介紹Unity如何匯出Android環境了,自行解決。
- 命令列啟動Jenkins,java -jar jenkins.war,會看到如下執行即代表啟動成功,可以在瀏覽器輸入http://localhost:8080/來測試,會看到進入Jenkins網站。
- 構建專案
注意windows路徑和命令列的路徑的轉變,上圖是Unity打包apk的批處理的路徑,這個批處理如下圖,並且要放到Unity的工程下。
注意:如果批處理路徑中不能帶有空格,如果有空格的話可以加上雙引號,確保這個批處理能夠正確的匯出apk,批處理程式碼如下,並且注意用utf8儲存:
@echo off echo "Start build apk..." C:\"Program Files"\Unity1748f1\Unity\Editor\Unity.exe -projectPath D:\study\gitoschina\jenkinsTest\HelloUnity -quit -batchmode -executeMethod PerformBuild.CommandLineBuildAndroid -logFile build.log REM %1 -projectPath %2 -quit -batchmode -executeMethod APKBuild.Build -logFile build.log if not %errorlevel%==0 ( goto fail ) else ( goto success ) :success echo Build APK OK goto end :fail echo Build APK Fail goto end :end pause
- 工程Editor目錄下新增自動構建的程式碼
using UnityEditor; using System.IO; using System.Collections; using UnityEngine; using System.Collections.Generic; class PerformBuild { static string[] GetBuildScenes() { List<string> names = new List<string>(); foreach (EditorBuildSettingsScene e in EditorBuildSettings.scenes) { if (e == null) continue; if (e.enabled) names.Add(e.path); } return names.ToArray(); } static string GetBuildPath() { string dirPath = Application.dataPath + "/../build/iPhone"; if (!System.IO.Directory.Exists(dirPath)) { System.IO.Directory.CreateDirectory(dirPath); } return dirPath; } [UnityEditor.MenuItem("Tools/PerformBuild/Test Command Line Build iPhone Step")] static void CommandLineBuild() { Debug.Log("Command line build\n------------------\n------------------"); string[] scenes = GetBuildScenes(); string path = GetBuildPath(); if (scenes == null || scenes.Length == 0 || path == null) return; Debug.Log(string.Format("Path: \"{0}\"", path)); for (int i = 0; i < scenes.Length; ++i) { Debug.Log(string.Format("Scene[{0}]: \"{1}\"", i, scenes[i])); } Debug.Log("Starting Build!"); BuildPipeline.BuildPlayer(scenes, path, BuildTarget.iOS, BuildOptions.None); } static string GetBuildPathAndroid() { string dirPath = Application.dataPath.Replace("/Assets", "") + "/../build/android/"+Application.productName+".apk"; if (!System.IO.Directory.Exists(dirPath)) { System.IO.Directory.CreateDirectory(dirPath); } return dirPath; } [UnityEditor.MenuItem("Tools/PerformBuild/Test Command Line Build Step Android")] static void CommandLineBuildAndroid() { Debug.Log("Command line build android version\n------------------\n------------------"); string[] scenes = GetBuildScenes(); string path = GetBuildPathAndroid(); if (scenes == null || scenes.Length == 0 || path == null) { Debug.LogError("Please add scene to buildsetting..."); return; } Debug.Log(string.Format("Path: \"{0}\"", path)); for (int i = 0; i < scenes.Length; ++i) { Debug.Log(string.Format("Scene[{0}]: \"{1}\"", i, scenes[i])); } Debug.Log("Starting Android Build!"); BuildPipeline.BuildPlayer(scenes, path, BuildTarget.Android, BuildOptions.None); } }
- 點選Jenkins構建
- 本地生成apk
更深入的配置可以參考以下連結,更多Jenkins外掛和功能可以摸索研究。Mac中匯出iOS配置後續新增或者想嘗試的朋友參考文末雨凇的文章。
下載連結
參考
後續
如果碰到問題歡迎留言討論!