TECHARTNOMAD | TECHARTFLOWIO.COM

TECH.ART.FLOW.IO

[번역]언리얼 엔진 TeamCity 빌드 환경설정

jplee 2023. 9. 5. 19:14

언리얼 엔진 TeamCity 빌드 환경설정 - Edward Beazer Blog (thedigitalsages.com)

 

Unreal Engine TeamCity build configuration - Edward Beazer Blog

My current TeamCity build configuration is a bit dated since I’ve paused on game development to work on my Housemates App. This was the first TeamCity config that I made, it does work but I think I can set it up smoother. Once I continue working on my ga

www.thedigitalsages.com

TeamCity로 언리얼 엔진 프로젝트를 테스트, 빌드 및 배포하세요.

하우스메이트 앱 작업을 위해 게임 개발을 잠시 중단했기 때문에 현재 TeamCity 빌드 구성이 약간 낡았습니다. 이것은 제가 만든 첫 번째 TeamCity 구성으로, 작동은 하지만 더 매끄럽게 설정할 수 있다고 생각합니다. 올여름이나 초가을에 게임 작업을 계속하면 업데이트된 구성으로 새 게시물을 작성하겠습니다.

Structure

그래서 원래 구성의 구조는 배포용, 빌드용, 테스트용 등 3개의 빌드 구성이 있도록 설정되어 있었습니다. 이 가이드에서는 개별 단계만 게시하겠습니다. 앞서 말했듯이 구식이지만 사용하려면 각 단계가 유효해야 합니다.

Engine

개발하는 것과 동일한 엔진을 사용할 수 있지만, 엔진은 한 번에 하나의 프로세스만 빌드할 수 있기 때문에 빌드에 실패하거나 빌드를 위해 개인 작업을 일시 중지해야 하는 문제가 발생했기 때문에 개인적으로 사용하지 않는 것이 좋습니다. 대신 저는 도커 컨테이너를 선택합니다. 이 글은 그 자체로 하나의 포스팅이지만, 저는 아담 렌이 만든 ue4-docker 및 ue4-cli 도구를 활용합니다. 이 도구를 사용하면 빌드 프로세스가 훨씬 더 원활해지고 엔진이 유지됩니다. 가장 큰 주의 사항은 이미지를 빌드하는 데 약 600GB, 최종 이미지를 저장하는 데 150GB가 필요하다는 것입니다.

Parameters

템플릿을 좋아해서 모든 언리얼 엔진 프로젝트에서 재사용할 수 있도록 이렇게 만들었습니다.

GameName - name of your game/project UE4 - Path to the unreal_editor.exe file

Build Features

XML 보고서 처리 - 테스트 섹션의 3단계에서 생성된 Junit 보고서를 팀시티가 가져오는 방식입니다. Perforce 관리자 액세스 - 연결 섹션에서 액세스할 수 있는 프로젝트 수준 기능입니다. 빌드 기능은 아니지만 비활성화된 워크스페이스를 정리해 주기 때문에 언급할 가치가 있습니다. 저는 많은 스트림을 빌드하지만 여전히 무료 20개 워크스페이스 라이선스를 사용하고 있습니다. 이 기능을 사용하지 않으면 한도에 자주 도달하여 비활성화된 것을 수동으로 삭제해야 합니다.

Tests

  1. 첫 번째 단계는 에디터를 빌드하는 것입니다. 앞서 언급한 ue4-cli 도구를 사용하여 이 작업을 수행합니다. 이 도구를 경로 안에 넣으면 스크립트는 다음과 같이 보일 것입니다.
ue4-cli build Development Editor
  1. 다음 단계는 선택 사항으로, 코드를 린트하고 그 결과를 TeamCity의 코드 검사 도구로 파싱합니다.

저는 구문 분석에 도움이 되는 자체 CLI를 만들었고 linterv2 플러그인을 사용하고 있습니다. 이 도구가 이번 여름에 개편되지 않는다면 여러 도구가 필요하지 않도록 이 모든 작업을 하나로 수행할 수 있는 제대로 된 엔진 플러그인을 구축할 예정입니다. 이 빌드 단계는 다음과 같습니다. 첫 번째 단계에서는 린터를 실행하여 JSON 보고서를 출력하고, 두 번째 단계에서는 해당 JSON 보고서를 읽고 결과를 TeamCity에 보고합니다.

%env.UE4% run -run=Linter -RuleSet=ue4.style -TreatWarningsAsErrors /Game/%env.GAME_NAME% -json=Lintreport.json -nullrhi
%teamcity.build.workingDir%\\bin\\ue4-ci.exe teamcity parseLintReport --json %teamcity.build.workingDir%\Saved\LintReports\Lintreport.json

프로젝트 구성에 이와 같은 탭을 만드는 것이 목표입니다. 여기에는 모든 검사 문제가 나열되며 허용할 매개 변수를 정의할 수 있습니다. 예를 들어 경고 수준 이슈는 5개, 오류 관련 이슈는 0개를 허용할 수 있습니다.

  1. 마지막으로 단위 테스트가 있습니다. 2단계에서 사용한 것과 동일한 두 가지 도구를 사용하여 생성합니다. 게임 작업을 다시 시작하면 게임을 테스트하기 위해 기능 테스트를 만드는 방법에 대한 포스팅을 작성하겠습니다.
%env.UE4% test Project -- ReportOutputPath=%system.teamcity.build.workingDir%\\Saved\\Reports
%teamcity.build.workingDir%\\bin\\ue4-ci.exe jsonToXml -j %system.teamcity.build.workingDir%\\Saved\Reports\\index.json -o %system.teamcity.build.workingDir%\\Saved\\Reports\\.xml -t '%Game_Name% Test Suite'

첫 번째 단계에서는 프로젝트 카테고리에 나열된 모든 테스트를 실행합니다. 그러면 에디터에서 만든 모든 테스트가 자동으로 선택됩니다. 두 번째 단계에서 보고서를 저장하고 구문 분석합니다. -t 옵션을 사용하면 테스트 스위트의 이름을 지정할 수 있습니다.

 

Build

  1. 저는 빌드하기 전에 이전에 만든 CLI 툴을 사용하여 게임의 프로젝트 버전을 업데이트합니다. 어떤 빌드가 테스트 중인지 확인하기 위해서입니다.
attrib -r %system.teamcity.build.workingDir%\\Config\\DefaultGame.ini
%teamcity.build.workingDir%\\bin\\ue4-ci.exe projectVersion set -i %teamcity.build.workingDir%\\Config\\DefaultGame.ini -s %build.number%

프로젝트 버전은 DefaultGame.ini에서 찾을 수 있으며, 첫 번째 단계는 이 파일을 쓰기 가능하게 만드는 것입니다. 두 번째 단계는 cli 명령을 실행하는 것인데, 기본적으로 ini에서 projectVersion 키를 검색한 다음 그 값을 TeamCity의 현재 빌드 번호로 바꿉니다.

 

  1. 게임을 빌드합니다. 이 문제가 아직 해결되었는지 모르겠지만 홀로렌즈를 비활성화했는데도 엔진에서 홀로렌즈 플랫폼을 게임에 추가했습니다. 필요한 부분에 대해 베어본 엔진을 실행하기 때문에 플랫폼이 설치되어 있지 않아 빌드 문제가 발생했습니다. 빌드 프로세스를 시작하기 전에 엔진에서 Hololens를 찾도록 하는 구성을 삭제한 다음 게임을 빌드했습니다.
del C:\UnrealEngine\Engine\Intermediate\ScriptModules\HoloLens.Automation.json 2>nul
%teamcity.build.workingDir%\\bin\\ue4-ci.exe clean dist --directory %system.teamcity.build.workingDir%\dist
%env.UE4% package Shipping

Steam Deploy

마지막 단계는 Steam 배포입니다. 저는 Windows 버전의 Steam을 사용하지만, Linux에서 배포가 작동하는지 확인하기 위해 다시 Linux를 사용해 볼 수도 있습니다. 가능하다면 SDK로 나만의 비공개 이미지를 만들어 모든 플랫폼에서 배포할 수 있을지도 모릅니다. 이 글을 쓰는 시점에서 이 구성은 Windows에서만 작동합니다.

xcopy %system.teamcity.build.tempDir%\Windows %system.teamcity.build.tempDir%\steamsdk\tools\ContentBuilder\content\ /E /H

이 명령은 최종 빌드를 복사하여 배포를 준비하기 위해 ContentBuilders 디렉터리에 넣습니다.

%system.teamcity.build.tempDir%\steamsdk\tools\ContentBuilder\builder\steamcmd.exe +login %env.STEAM_USER% %env.STEAM_PASSWORD% +run_app_build_http %system.teamcity.build.tempDir%\steamsdk\tools\ContentBuilder\scripts\%VDF_FILE% +quit

TeamCity에서 사용자 이름과 비밀번호를 동일하게 설정하는 대신 로컬 컴퓨터에 저장했습니다. 그러면 게임이 Steam에 배포됩니다.