GitLab에서 Unity의 Android 앱을 자동 빌드하려고 시도했습니다.

GitLab에서 Unity의 Android 앱을 자동 빌드하려고 시도했습니다.



GitLab에서 Unity의 Android 앱을 자동 빌드하려고했습니다.
처음에는 Windows 10에서 시행 착오했지만 GitLab Runner 실행 사용자가 시스템 계정이기 때문에 오류가 해결되지 않았습니다.
Mac에서 시도했는데 문제없이 움직였기 때문에 Mac을 사용하는 것이 좋을 것 같습니다.

환경


  • macOS Catalina 10.15.4
  • GitLab CE 12.8.6 (Windows10의 가상 서버에서 실행 중)
  • GitLab Runner 12.9.0 (Mac에서 실행 중)
  • Unity 2018.4.20f1

  • 폴더 구성




    파일/폴더
    내용


    TestProject_Unity/
    Unity 프로젝트 폴더

    TestProject_Unity/.gitignore
    Git 무시 목록 파일

    TestAutoTest/TestProject_Unity/Assets/Editor/AppBuild.cs
    빌드 실행 메소드 C# 파일

    .gitlab-ci.yml
    GitLab CI 구성 파일

    build.sh
    빌드용 쉘 스크립트 파일

    README.md
    설명 파일


    주의점



    Android SDK를 설치한 폴더에 tools 폴더가 없을 수 있습니다.



    tools 폴더가 보이지 않으면 Android Studio에서 SDKManager를 시작하고 Android SDK Platform-Tools를 설치해보십시오.



    파일 내용



    TestProject_Unity/.gitignore


    /[Ll]ibrary/
    /[Tt]emp/
    /[Oo]bj/
    /[Bb]uild/
    /[Bb]uilds/
    /Assets/AssetStoreTools*
    
    # Autogenerated VS/MD solution and project files
    ExportedObj/
    *.csproj
    *.unityproj
    *.sln
    *.suo
    *.tmp
    *.user
    *.userprefs
    *.pidb
    *.booproj
    *.svd
    
    # Unity3D generated meta files
    *.pidb.meta
    
    # Unity3D Generated File On Crash Reports
    sysinfo.txt
    
    # Builds
    *.apk
    *.unitypackage
    
    # Visual Studio
    .vs
    Release/
    Debug/
    

    .gitlab-ci.yml


    stages:
      - build
    
    job_build01:
      stage: build
      script:
        - echo "Start build"
        - chmod a+x ./build.sh
        - ./build.sh Android 1.2.3.4
        - echo "Finish build"
      tags:
        - mac
      artifacts:
        paths:
          - build_*.log
          - TestProject_Unity/Build/
        expire_in: 1 week
    

    TestAutoTest/TestProject_Unity/Assets/Editor/AppBuild.cs


    using UnityEditor;
    using UnityEngine;
    using UnityEditor.Build.Reporting;
    using System;
    using System.Collections.Generic;
    
    public class AppBuild : MonoBehaviour
    {
        static string[] GetSceneList()
        {
            List<string> sceneList = new List<string>();
            EditorBuildSettingsScene[] scenes = EditorBuildSettings.scenes;
            foreach (EditorBuildSettingsScene scene in scenes)
            {
                if (scene.enabled)
                {
                    sceneList.Add(scene.path);
                }
            }
            return sceneList.ToArray();
        }
    
        static string GetArgument(string name)
        {
            string[] arguments = Environment.GetCommandLineArgs();
            for (int i = 0; i < arguments.Length; i++)
            {
                if (arguments[i].Contains(name))
                {
                    return arguments[i + 1];
                }
            }
            return null;
        }
    
        public static void Build()
        {
            string locationPathName = "";
            BuildTarget target = BuildTarget.NoTarget;
            string bundleVersion = GetArgument("/version");;
            string platformName = GetArgument("/platform");
            switch (platformName.ToLower())
            {
                case "android":
                    {
                        locationPathName = "Build/" + platformName + "_" + bundleVersion + ".apk";
                    }
                    break;
                default:
                    {
                        locationPathName = "Build/" + platformName + "_" + bundleVersion;
                    }
                    break;
            }
            target = (BuildTarget)Enum.Parse(typeof(BuildTarget), platformName);
    
            BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions();
            buildPlayerOptions.scenes = GetSceneList();
            buildPlayerOptions.locationPathName = locationPathName;
            buildPlayerOptions.target = target;
            buildPlayerOptions.options = BuildOptions.Development;
    
            PlayerSettings.bundleVersion = bundleVersion;
    
            BuildReport report = BuildPipeline.BuildPlayer(buildPlayerOptions);
            BuildSummary summary = report.summary;
    
            if (summary.result == BuildResult.Succeeded)
            {
                Debug.Log("Build succeeded: " + summary.totalSize + " bytes");
            }
    
            if (summary.result == BuildResult.Failed)
            {
                Debug.Log("Build failed");
            }
        }
    }
    

    부위 LD. sh


    #!/bin/bash
    
    SHELL_PATH=`pwd`
    PLATFORM=$1
    VERSION=$2
    
    UNITY=/Applications/Unity/Hub/Editor/2018.4.20f1/Unity.app/Contents/MacOS/Unity
    LOGFILE=build_${PLATFORM}.log
    PROJECT_PATH=TestProject_Unity
    EXECUTE_METHOD=AppBuild.Build
    
    ${UNITY} -batchmode -quit -logFile ${LOGFILE} -projectPath "${SHELL_PATH}/${PROJECT_PATH}" -executeMethod ${EXECUTE_METHOD} /platform ${PLATFORM} /version ${VERSION}
    

    요약



    Unity 빌드는 꽤 시간이 걸립니다.
    개발에 전념할 수 있도록, 자동 빌드하는 환경을 준비해 어떻습니까?

    좋은 웹페이지 즐겨찾기