CI/CD 파이프라인
Jenkins와 GitHub Actions로 UE5 프로젝트의 빌드, 테스트, 배포를 완전 자동화합니다
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 엔진 설치 필요 (소스 빌드 또는 Installed Build)
- 대용량 에셋으로 인해 LFS 또는 Perforce 필수
- 쿠킹 시 DDC(Derived Data Cache) 공유로 속도 향상
- 충분한 디스크 공간 (프로젝트 규모에 따라 100GB+)
Jenkins 파이프라인
Jenkins로 UE5 빌드 파이프라인 구축하기
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}"
}
}
}
GitHub Actions 워크플로우
GitHub Actions로 UE5 빌드 자동화하기
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 }}"
UE5 빌드에는 GitHub의 기본 Runner를 사용할 수 없습니다. Self-hosted Runner에 UE5를 설치하고, 충분한 디스크/메모리를 확보해야 합니다. Runner 설정은 GitHub Repository Settings > Actions > Runners에서 할 수 있습니다.
파이프라인 최적화
빌드 시간 단축과 효율적인 파이프라인 운영
| 최적화 | 효과 | 방법 |
|---|---|---|
| DDC 공유 | 쿠킹 시간 50-80% 감소 | 네트워크 DDC 경로 설정 |
| Installed Build | 에디터 빌드 스킵 | 미리 빌드된 엔진 사용 |
| 증분 쿠킹 | 변경된 에셋만 쿠킹 | -iterate 플래그 |
| 병렬 빌드 | 컴파일 속도 향상 | IncrediBuild, FASTBuild |
| 캐싱 | 종속성 재다운로드 방지 | 빌드 캐시 유지 |
[DerivedDataBackendGraph]
Shared=(Type=FileSystem, ReadOnly=false,
Clean=false, Flush=false,
Path="\\\\BuildFarm\\DDC",
EnvPathOverride=UE_SharedDataCachePath)
- PR 단계: 컴파일 + 에셋 감사 + 유닛 테스트 (빠르게)
- main 머지: 전체 빌드 + 쿠킹 + 패키징 (완전한 검증)
- 릴리즈: Shipping 빌드 + 통합 테스트 + 배포 (수동 승인 게이트)
- 실패 알림은 Slack/Teams로, 빌드 결과는 대시보드로 시각화
핵심 요약
- 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에 통합하여 에셋 감사, 자동 테스트, 보고서 생성을 자동화합니다
도전 과제
배운 내용을 직접 실습해보세요
GitHub Actions 또는 Jenkins에서 UE5 프로젝트를 빌드하는 기본 CI 파이프라인을 구성하세요. RunUAT BuildCookRun 명령어로 빌드/쿠킹/패키징을 자동화하고, 빌드 성공/실패 알림을 설정하세요.
CI 파이프라인에 UE5 Automation Test 실행 단계를 추가하세요. RunUAT RunTests 명령어로 프로젝트의 단위 테스트와 기능 테스트를 자동 실행하고, 테스트 결과를 아티팩트로 저장하세요.
단일 커밋에서 Win64, Android, iOS 빌드를 병렬로 실행하는 멀티플랫폼 CI/CD 파이프라인을 구성하세요. 각 플랫폼별 코드 서명, 스토어 업로드, 스모크 테스트, 릴리스 노트 자동 생성을 포함하는 완전 자동화 배포 시스템을 설계하세요.