GitLab에서 Unity의 Android 앱을 자동 빌드하려고 시도했습니다.
GitLab에서 Unity의 Android 앱을 자동 빌드하려고 시도했습니다.
GitLab에서 Unity의 Android 앱을 자동 빌드하려고했습니다.
처음에는 Windows 10에서 시행 착오했지만 GitLab Runner 실행 사용자가 시스템 계정이기 때문에 오류가 해결되지 않았습니다.
Mac에서 시도했는데 문제없이 움직였기 때문에 Mac을 사용하는 것이 좋을 것 같습니다.
환경
폴더 구성
파일/폴더
내용
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 빌드는 꽤 시간이 걸립니다.
개발에 전념할 수 있도록, 자동 빌드하는 환경을 준비해 어떻습니까?
Reference
이 문제에 관하여(GitLab에서 Unity의 Android 앱을 자동 빌드하려고 시도했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hkomo746/items/042acaa9fe6c2b4f7af7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)