PART 6 · 강의 3/3

CI/CD 파이프라인

Jenkins와 GitHub Actions로 UE5 프로젝트의 빌드, 테스트, 배포를 완전 자동화합니다

01

UE5 CI/CD 아키텍처

게임 프로젝트를 위한 CI/CD 파이프라인 설계

UE5 프로젝트의 CI/CD 파이프라인은 일반 소프트웨어와 다른 특수한 요구사항이 있습니다.

단계작업도구
1. Compile 에디터 및 게임 코드 빌드 RunUAT, BuildGraph
2. Validate 에셋 감사, 데이터 검증 커맨드렛, Python
3. Test 자동화 테스트 실행 Gauntlet, Automation
4. Cook 에셋 쿠킹 (플랫폼별) BuildGraph, RunUAT
5. Package 게임 패키징 BuildGraph, RunUAT
6. Deploy 빌드 배포 (스토어, QA) Steam CMD, 사내 CDN
UE5 CI/CD 특수 요구사항
  • 빌드 머신에 UE5 엔진 설치 필요 (소스 빌드 또는 Installed Build)
  • 대용량 에셋으로 인해 LFS 또는 Perforce 필수
  • 쿠킹 시 DDC(Derived Data Cache) 공유로 속도 향상
  • 충분한 디스크 공간 (프로젝트 규모에 따라 100GB+)
02

Jenkins 파이프라인

Jenkins로 UE5 빌드 파이프라인 구축하기

Jenkinsfile (Declarative Pipeline) pipeline { agent { label 'ue5-build' } environment { UE_ROOT = 'C:\\Program Files\\Epic Games\\UE_5.5' PROJECT = "${WORKSPACE}\\MyGame.uproject" BUILD_DIR = "D:\\Builds\\${BUILD_NUMBER}" } stages { stage('Compile') { steps { bat """ "%UE_ROOT%\\Engine\\Build\\BatchFiles\\RunUAT.bat" ^ BuildCookRun ^ -project="%PROJECT%" ^ -noP4 ^ -platform=Win64 ^ -clientconfig=Development ^ -build ^ -compile """ } } stage('Asset Audit') { steps { bat """ "%UE_ROOT%\\Engine\\Binaries\\Win64\\UnrealEditor-Cmd.exe" ^ "%PROJECT%" ^ -run=AssetAudit ^ -RootPath=/Game ^ -Output="%WORKSPACE%\\audit_report.csv" """ archiveArtifacts artifacts: 'audit_report.csv' } } stage('Test') { steps { bat """ "%UE_ROOT%\\Engine\\Build\\BatchFiles\\RunUAT.bat" ^ RunTests ^ -project="%PROJECT%" ^ -platform=Win64 ^ -configuration=Development ^ -ReportOutputPath="%WORKSPACE%\\TestResults" """ junit 'TestResults/*.xml' } } stage('Package') { when { branch 'main' } steps { bat """ "%UE_ROOT%\\Engine\\Build\\BatchFiles\\RunUAT.bat" ^ BuildCookRun ^ -project="%PROJECT%" ^ -noP4 ^ -platform=Win64 ^ -clientconfig=Shipping ^ -cook -stage -package -pak ^ -archive ^ -archivedirectory="%BUILD_DIR%" """ archiveArtifacts artifacts: "${BUILD_DIR}/**" } } } post { failure { // Slack 알림, 이메일 등 slackSend channel: '#builds', message: "Build FAILED: ${env.JOB_NAME} #${env.BUILD_NUMBER}" } success { slackSend channel: '#builds', message: "Build SUCCESS: ${env.JOB_NAME} #${env.BUILD_NUMBER}" } } }
03

GitHub Actions 워크플로우

GitHub Actions로 UE5 빌드 자동화하기

.github/workflows/ue5-build.yml name: UE5 Build Pipeline on: push: branches: [ main, develop ] pull_request: branches: [ main ] env: UE_VERSION: "5.5" PROJECT_NAME: "MyGame" jobs: compile-and-test: runs-on: self-hosted # UE5 설치된 셀프 호스트 러너 timeout-minutes: 120 steps: - name: Checkout uses: actions/checkout@v4 with: lfs: true - name: Compile Editor shell: cmd run: | "%UE_ROOT%\Engine\Build\BatchFiles\RunUAT.bat" ^ BuildCookRun ^ -project="%GITHUB_WORKSPACE%\%PROJECT_NAME%.uproject" ^ -noP4 -platform=Win64 ^ -clientconfig=Development ^ -build -compile - name: Asset Audit shell: cmd run: | "%UE_ROOT%\Engine\Binaries\Win64\UnrealEditor-Cmd.exe" ^ "%GITHUB_WORKSPACE%\%PROJECT_NAME%.uproject" ^ -run=AssetAudit ^ -RootPath=/Game ^ -Output="%GITHUB_WORKSPACE%\audit.csv" - name: Upload Audit Report uses: actions/upload-artifact@v4 with: name: audit-report path: audit.csv - name: Run Automation Tests shell: cmd run: | "%UE_ROOT%\Engine\Build\BatchFiles\RunUAT.bat" ^ RunTests ^ -project="%GITHUB_WORKSPACE%\%PROJECT_NAME%.uproject" ^ -platform=Win64 package: needs: compile-and-test runs-on: self-hosted if: github.ref == 'refs/heads/main' steps: - name: Checkout uses: actions/checkout@v4 with: lfs: true - name: Package (Shipping) shell: cmd run: | "%UE_ROOT%\Engine\Build\BatchFiles\RunUAT.bat" ^ BuildCookRun ^ -project="%GITHUB_WORKSPACE%\%PROJECT_NAME%.uproject" ^ -noP4 -platform=Win64 ^ -clientconfig=Shipping ^ -cook -stage -package -pak ^ -archive -archivedirectory="D:\Builds\${{ github.run_number }}"
Self-Hosted Runner 필수

UE5 빌드에는 GitHub의 기본 Runner를 사용할 수 없습니다. Self-hosted Runner에 UE5를 설치하고, 충분한 디스크/메모리를 확보해야 합니다. Runner 설정은 GitHub Repository Settings > Actions > Runners에서 할 수 있습니다.

04

파이프라인 최적화

빌드 시간 단축과 효율적인 파이프라인 운영

최적화효과방법
DDC 공유 쿠킹 시간 50-80% 감소 네트워크 DDC 경로 설정
Installed Build 에디터 빌드 스킵 미리 빌드된 엔진 사용
증분 쿠킹 변경된 에셋만 쿠킹 -iterate 플래그
병렬 빌드 컴파일 속도 향상 IncrediBuild, FASTBuild
캐싱 종속성 재다운로드 방지 빌드 캐시 유지
DefaultEngine.ini - DDC 설정 [DerivedDataBackendGraph] Shared=(Type=FileSystem, ReadOnly=false, Clean=false, Flush=false, Path="\\\\BuildFarm\\DDC", EnvPathOverride=UE_SharedDataCachePath)
전체 파이프라인 설계 원칙
  • PR 단계: 컴파일 + 에셋 감사 + 유닛 테스트 (빠르게)
  • main 머지: 전체 빌드 + 쿠킹 + 패키징 (완전한 검증)
  • 릴리즈: Shipping 빌드 + 통합 테스트 + 배포 (수동 승인 게이트)
  • 실패 알림은 Slack/Teams로, 빌드 결과는 대시보드로 시각화
SUMMARY

핵심 요약

  • UE5 CI/CD는 Compile → Validate → Test → Cook → Package → Deploy 단계로 구성됩니다
  • Jenkins Declarative Pipeline으로 빌드 파이프라인을 정의하고, RunUAT.bat으로 UE5 빌드를 실행합니다
  • GitHub Actions는 Self-hosted Runner에 UE5를 설치하여 사용하며, PR과 main 브랜치에 다른 워크플로우를 적용합니다
  • DDC 공유, Installed Build, 증분 쿠킹으로 빌드 시간을 대폭 단축할 수 있습니다
  • 커맨드렛과 BuildGraph를 CI/CD에 통합하여 에셋 감사, 자동 테스트, 보고서 생성을 자동화합니다
PRACTICE

도전 과제

배운 내용을 직접 실습해보세요

실습 1: 기본 CI 파이프라인 구성

GitHub Actions 또는 Jenkins에서 UE5 프로젝트를 빌드하는 기본 CI 파이프라인을 구성하세요. RunUAT BuildCookRun 명령어로 빌드/쿠킹/패키징을 자동화하고, 빌드 성공/실패 알림을 설정하세요.

실습 2: 자동 테스트 통합

CI 파이프라인에 UE5 Automation Test 실행 단계를 추가하세요. RunUAT RunTests 명령어로 프로젝트의 단위 테스트와 기능 테스트를 자동 실행하고, 테스트 결과를 아티팩트로 저장하세요.

심화 과제: 멀티플랫폼 CI/CD 파이프라인

단일 커밋에서 Win64, Android, iOS 빌드를 병렬로 실행하는 멀티플랫폼 CI/CD 파이프라인을 구성하세요. 각 플랫폼별 코드 서명, 스토어 업로드, 스모크 테스트, 릴리스 노트 자동 생성을 포함하는 완전 자동화 배포 시스템을 설계하세요.