Steam에 게임을 출시해보자 (3편) - 스팀게임 CI(빌드 자동화) 파이프라인 구축 (ver. Unity)

댓글 1
댓글을 작성하려면 로그인이 필요합니다.
이전 포스팅을 통해서 스팀 게임을 업로드하고 출시할 수 있는 과정을 진행했습니다. 여기까지만 하더라도 여러분들이 원하는 게임을 출시하고 관리하는 것이 가능하지만, 매번 수동으로 출시 과정을 관리한다면 실제 게임 개발 과정에서 게임을 만드는 시간보다 출시를 준비하는 것에 더 많은 시간을 쏟아야 하는 상황이 발생합니다.
이러한 이유들 때문에 빌드 자동화 과정은 필수라고 할 수 있습니다! 게임을 잘 개발하는 것도 능력이지만, 게임을 잘 개발할 수 있는 환경을 조성하는 것도 개발자의 능력이기 때문이죠. 그러므로 코드 변경사항을 Git에 Push만 하면, [빌드 -> 테스트 -> 업로드 -> 결과 알림]까지 알아서 자동으로 진행해주는 "빌드 자동화 파이프 라인" 구축이 필수적입니다!

CI/CD는 지속적 통합(Continuous Integration)과 지속적 배포(Continuous Deployment)를 의미합니다. 게임 개발 업계에서 통합과 배포에 필요한 과정을 자동화하고 오로지 게임 개발에만 집중할 수 있도록 환경을 조성하는 것을 뜻합니다.

만약 여러분들이 기존의 게임빌드 과정을 수행한다면 유니티 에디터를 열고 Build Profile 클릭하여 빌드 설정을 연 뒤 Build 버튼을 클릭하여 빌드과정을 수행하실 겁니다. 하지만, 컴퓨터 입장에서는 이러한 마우스 클릭과 GUI 환경에서 진행하는 것이 아닌 명령어를 통해서 빌드하는 과정을 더욱 수월하게 수행합니다. 즉, 인간이 빌드를 한다면 마우스와 GUI에서 클릭하여 진행하겠지만, 컴퓨터가 자동으로 빌드한다면 클릭이 필요없이 명령어를 통해서 빌드를 수행하는 것이 수월하죠.
유니티도 이러한 상황처럼 직접 빌드 버튼을 눌러 빌드를 수행하는 과정 대신 명령어를 통해서 빌드도 가능합니다. 이를 Batchmode(배치모드)라고 하며 기본적으로 제공하는 명령프롬프트(CMD)에 CLI 빌드 스크립트를 작성하여 빌드를 수행할 수 있습니다. 처음보는 상황이라 익숙하지 않지만 Step by Step으로 천천히 과정을 진행해보죠.
먼저 빌드를 자동화하기 위해서는 유니티 빌드 과정을 설정할 필요가 있습니다. 스크립트를 통해서 빌드설정과정과 수행과정을 구성해두면 이후에는 이 수행과정을 실행만 해내면 됩니다.
테스트 환경
- 운영체제 : Window 11
- 유니티 버전 : Unity 6.3 LTS



using UnityEditor;
public static class BuildScript
{
[MenuItem("Build/Window")]
public static void BuildWindow()
{
// 빌드를 진행할 때 설정할 옵션들
BuildPlayerOptions options = new BuildPlayerOptions();
// 빌드에 포함되어야 할 씬 목록
options.scenes = new [] {
"Assets/FPS/Scenes/IntroMenu.unity",
"Assets/FPS/Scenes/WinScene.unity",
"Assets/FPS/Scenes/LoseScene.unity",
"Assets/FPS/Scenes/MainScene.unity",
"Assets/FPS/Scenes/SecondaryScene.unity",
};
// 빌드 결과물이 나오는 경로 (윈도우게임 실행파일 경로인 .exe로 끝나야 함)
options.locationPathName = "C:\\/ProjectDC_Window/ProjectDC.exe";
// 빌드 타겟 플랫폼
options.target = BuildTarget.StandaloneWindows;
// 빌드 진행
BuildPipeline.BuildPlayer(options);
}
}




스크립트를 통해서 빌드과정을 진행할 수 있다면 이제는 유니티를 열지 않은 상황에서 빌드를 수행할 수 있는 명령어를 구성해야 합니다. 유니티를 열지 않은 상황에서 빌드를 수행할 수 있다면, 주기적 또는 필요시 게임을 빌드하여 업로드해야 하는 과정에서 꼭 유니티를 열어야 하는 제약사항 없이 백그라운드에서 게임을 빌드하고 업로드하는 과정이 가능합니다.
이를 위해서는 유니티 커맨드 라인 인자라는 방법이 필요하며 유니티의 자동화된 빌드, 작업을 테스트할 때 매우 유용합니다. (참고자료 : https://docs.unity3d.com/kr/2022.3/Manual/EditorCommandLineArguments.html)
{유니티 경로} -quit -batchmode -projectPath {프로젝트 경로} -executeMethod {클래스이름}.{함수이름}



"C:\Program Files\Unity\Hub\Editor\6000.3.9f1\Editor\Unity.exe" -quit -batchmode -projectPath "C:\Project\Unity\FPSSample" -executeMethod BuildScript.BuildWindow

위 과정을 통해서 명령어를 통해서 유니티를 열 필요 없이 빌드 과정을 수행할 수 있습니다. 하지만 아직 자동화 단계를 진행했다고 볼 수는 없습니다. 우리가 원하는 것은 게임을 개발하고 있을 때 컴퓨터가 자동적으로 게임 빌드를 수행해주는 것을 최종 목표로 하고 있습니다. 이를 가능하게 해주는 프로그램이 Jenkins가 있습니다. Jenkins는 CI/CD 도구로 지금까지도 현업에서 가장 많이 활용하고 있는 툴입니다. (참고자료 : https://www.jenkins.io/doc/tutorials/)

이번에는 Jenkins를 활용하여 게임 빌드 자동화 시스템을 구축하지만, 앞으로의 개발자 인생에서 여러분이 잘 활용하면 무궁무진한 가능성을 가지고 있는 도구이기 때문에, 시간이 여력이 있다면 Jenkins를 여러 용도로 활용하시는 것을 적극 추천합니다.
Jenkins를 설치하기 앞서 Jenkins는 Java SDK 21 또는 25 버전 설치를 필요로 합니다. 따라서 Java SDK부터 설치한 뒤 Jenkins 설치 과정을 진행하도록 하겠습니다.

















설치가 완료되었다면 이제 Jenkins가 동작하기 위한 환경을 설정할 필요가 있습니다. 이 경우도 한 단계씩 진행하겠습니다.
jenkins는 원격 포트를 사용하여 외부에서 접속이 가능합니다.
즉, 이 의미는 자동 빌드설정이 완료된 게임빌드 PC를 원격으로 접속하여 작업이 가능하다는 뜻입니다.










환경 설정이 완료되었다면 Credential 을 발급 받아야합니다. Jenkins는 안전하게 원하는 계정의 정보를 얻어내기 위해 Credential을 사용합니다.













환경설정이 마무리 되었다면, 새로운 Item를 만들고 빌드를 진행해볼 수 있습니다.





만약 빌드 중 오류가 발생하는 경우는 로그를 통해서 확인할 수 있습니다.
대다수의 오류는 라이센스 문제로, 유니티 허브에서 라이센스를 다시 재발급 받는 경우 문제를 해결할 수 있습니다.


빌드를 주기적으로 또는 새로운 코드가 추가된 경우에 자동으로 빌드가 수행되도록 설정한다면, Jenkins는 신경쓰지 않고 오로지 개발에만 집중할 수 있는 환경을 갖추게 됩니다. 이를 빌드 트리거라고 합니다.

Github hook은 github에 새로운 코드가 올라온 경우에 발동되는 트리거 입니다. Github 레포지토리의 설정에서 Webhook을 설정하는 경우에 코드의 갱신이 있을때마다 빌드를 실행시킬 수 있습니다. 다만, 이 경우는 Github에서 빌드 피시를 접근하기 위한 ddns 가 있을 필요가 있습니다. 각자 보유하신 공유기의 설정에서 ddns 설정과 포트포워딩을 구성한다면 로컬 컴퓨터에서도 Webhook을 받을 수 있습니다.


만약 ddns 설정과 포트포워딩 설정이 어렵다면 poll SCM 방식을 권장합니다. 해당 방법은 코드의 갱신과 무관하게 주기적으로 빌드를 수행할 수 있습니다. 물론 변경사항이 없는 경우 빌드를 수행하지 않기 때문에 무의미하게 빌드하는 경우는 발생하지 않습니다. 너무 짧은 주기를 선정하는 경우 네트워크에 무리가 갈 수 있으니 너무 짧은 주기로 빌드하지 않도록 주의해주세요.

이제 Jenkins를 통해서 환경설정을 구성한 경우에는, 유니티 프로젝트를 편집하면서 동시에 Jenkins로 빌드가 가능해집니다. 즉, 작업을 멈출 필요 없이 계속해서 유니티 프로젝트를 작업하시면 되며, 빌드가 필요한 경우에는 Jenkins의 지금 빌드를 진행하면 됩니다. 둘 모두 독립적으로 동작하며 서로 작업에 영향을 주지 않습니다.
앞으로의 작업은 오로지 유니티 프로젝트 제작 작업에만 몰두하시면 됩니다. 빌드 과정은 Jenkins가 담당하며 빌드 과정의 이력 또한 저장하고 있습니다. 자동화하여 빌드 과정을 구성한 경우 이제는 프로젝트 개발에만 집중하시면 됩니다!

SteamWorks 파트너를 채결하고 이제 정식적으로 스팀에 게임을 업로드하고 배포할 수 있는 자격을 얻으시게 되었습니다. 축하합니다! 다음 단계로 차근차근 진행하여 빌드를 업로드하고 유저들에게 배포할 수 있는 준비를 진행하시죠

SteamWorks 파트너란? SteamWorks 파트너 가입은 여러분의 게임을 스팀 플랫폼에 출시하기 위한 첫걸음이자 필수적인 과정입니다. 간단히 말해, SteamWorks는 게임 개발사나 개인이 자신의 게임을 스팀 상점에 등록하고, 판매하며, 관리할 수 있도록 제공하는 서비스 모음이라고 생각하시면 됩니다. 파트너 가입은 단순한 계정 생성 이상의 의미를

산나비, 스텔 라블레이드, 데이브 더 다이브, 피의 거짓 등이 참가했던 스팀 넥스트 페스트란?

SteamWorks 파트너를 채결하고 이제 정식적으로 스팀에 게임을 업로드하고 배포할 수 있는 자격을 얻으시게 되었습니다. 축하합니다! 다음 단계로 차근차근 진행하여 빌드를 업로드하고 유저들에게 배포할 수 있는 준비를 진행하시죠


SteamWorks 파트너란? SteamWorks 파트너 가입은 여러분의 게임을 스팀 플랫폼에 출시하기 위한 첫걸음이자 필수적인 과정입니다. 간단히 말해, SteamWorks는 게임 개발사나 개인이 자신의 게임을 스팀 상점에 등록하고, 판매하며, 관리할 수 있도록 제공하는 서비스 모음이라고 생각하시면 됩니다. 파트너 가입은 단순한 계정 생성 이상의 의미를


와....정성이....대단하십니다...