1. 程式人生 > >如何搭建Jenkins匯出Unity安卓環境

如何搭建Jenkins匯出Unity安卓環境

前言

早早去公司上班,老大經常會叫我出一個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配置後續新增或者想嘗試的朋友參考文末雨凇的文章。

下載連結

參考

後續

如果碰到問題歡迎留言討論!

原文連結