Jenkins
젠킨스 설치하면 유니티 플러그인이 없는 상태로 설치될텐데, 플러그인부터 깔고 유니티 플러그인 관련 설정을 해줘야한다.
1. Unity3d 플러그인 설치
[Jenkins 관리] > [Plugins] > [Available Plugins] 탭 클릭 > Unity검색해서 Unity3d plugin 다운로드
2. Unity 실행 경로 설정
[Jenkins 관리] > [Global Tool Configuration] > [Unity3d] 에서 [Add Unity3d] 클릭 > Name에 버전명, Installation directory에 유니티 에디터 경로 설정(예를 들면 C:\Unity\2021.3.5.f1\
) > [Save] 및 [Apply]
3. 프로젝트의 빌드 구성
대시보드에서 생성한 프로젝트의 [구성]을 들어가거나, 새로운 item을 통해 프로젝트를 생성한다.
[Build] 란의 [Unity3d installation name] 드롭다운 메뉴에서 아까 실행 경로 설정한 Unity 클릭
[Editor command lin arguments]에 커맨드라인 인자 입력
무엇을 입력할 지는 유니티 문서를 참고(사용하는 유니티 버전에 따라 문서 좌측 상단의 Version을 변경해서 보자)
나는 아래와 같이 입력했다.
-quit -batchmode -buildTarget Win64 -projectPath "C:\unity-projects\FirstPerson" -executeMethod Jenkins.PerformBuild
빌드 타겟과 프로젝트 경로를 각자 맞게 변경해주면 된다.
주의 할 점은 -executeMethod Jenkins.PerformBuild
이다. 아래에서 C# 스크립트를 생성해 빌드 관련 코드를 채워넣을 것인데, 그 스크립트의 클래스명.함수명 을 적으면 된다. 즉, -executeMethod ClassName.MethodName
이다.
이렇게 하면 젠킨스가 Unity를 batch 모드로 실행해 해당 함수를 호출한다.
Unity
1. 빌드 관련 스크립트 작성
[Assets] 폴더에 [Editor] 폴더를 만든다. 이후 이 안에 새로운 C# 스크립트를 생성한다.
이 글에선 이름을 Jenkins로 했지만, 별로 좋은 이름은 아닌 것 같고... 빌드 관련된 이름으로 지어주면 된다.
코드의 내용은 다음과 같다.
// Assets/Editor/Jenkins.cs
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
public class Jenkins
{
[MenuItem("Build/Standalone Windows")]
public static void PerformBuild()
{
BuildPlayerOptions options = new BuildPlayerOptions();
// 씬 추가
List<string> scenes = new List<string>();
foreach (var scene in EditorBuildSettings.scenes)
{
if(!scene.enabled) continue;
scenes.Add(scene.path);
}
options.scenes = scenes.ToArray();
// 타겟 경로(빌드 결과물이 여기 생성됨)
options.locationPathName = "Build/FirstPerson.exe";
// 빌드 타겟
options.target = BuildTarget.StandaloneWindows;
// 빌드
BuildPipeline.BuildPlayer(options);
}
}
BuildPlayerOption 구조체로 빌드 설정을 해주고, BuildPipeline.BuildPlayer 로 빌드한다.
빌드 설정 역시도 유니티 문서에 나와있다. 간단하게 만들어본 코드라 하드코딩된 경로를 사용했지만, 입맛에 맞게 바꾸면 된다.
이렇게 하고나서 Jenkins에서 빌드하면 정상적으로 빌드될 것이다.
만약 문제가 발생한다면 빌드 버전의 [Console Output]에서 결과가 failure로 나오면서 로그를 뱉어내니 보고 참고해서 고치면 된다. 나는 Editor 폴더에 안넣어서 오류가 발생했었다.
빌드 자동화가 필요한 이유
CI/CD라고 흔히 부르는 지속적 통합, 지속적 배포의 주요 목표는 사용자에게 제대로 작동하는 소프트웨어를 자주 빠르게 제공하는 것이다. 귀찮고 번거롭고 오래 걸리는, 빌드 및 배포를 자동화해서 결과물을 좀 더 빨리 확인하고 검토하고 수정하는 것이 장점이다.
그 외에는 https://www.jetbrains.com/ko-kr/teamcity/ci-cd-guide/benefits-of-ci-cd/ 여기에 정리가 매우 잘되어있다.
여담
개인적으로는 필요성을 잘 느끼지 못하고 있다가 소규모 팀으로 개발을 진행하면서 조금 느끼기 시작했다. 일일이 내가 빌드 및 배포를 하면 번거롭고 오래 걸리지만, CI/CD 툴을 활용하면 자동으로 되는 것뿐만 아니라 틈틈히 빌드해서 작업 결과물을 즉시 다 같이 확인할 수 있다는 점이 좋은 것 같다.
사실 게임회사에서는 어떤 프로세스로 흘러가는지 경험해보진 않았기에 잘 모르지만, 검색해보니 아래 자료들이 나왔다. 참고하면 좋을 듯 하다.
https://technology.riotgames.com/news/legends-runeterra-cicd-pipeline
테스트 자동화까지 내용이 나와있는데 오늘 처음 관심이 생겨서 찾아본 내용이라 좀 난해하다...