INTSourceChangelist:6252361 Availability: Public Title: BuildGraph Description: BuildGraph 스크립트 시스템을 사용하여 Installed Build 를 커스터마이징하는 방법입니다. Type: landing Version: 4.13 Parent: Programming/BuildTools/AutomationTool Tags: Programming Tags: BuildGraph Order: 0 Related: Programming/BuildTools **BuildGraph** 는 스크립트 기반 빌드 자동화 시스템으로, 언리얼 엔진 4 (UE4) 프로젝트에 공통인 구성 요소 그래프를 특징으로 합니다. BuildGraph 는 UnrealBuildTool, AutomationTool, 에디터와 통합되어 있으며, 확장을 통해 프로젝트에 맞게 커스터마이징할 수 있습니다. BuildGraph 스크립트는 XML 로 작성하며, 사용자 지정 노드 그래프를 그 사이 종속성으로 지정하는 식입니다. 각 노드는 (이 프로젝트를 컴파일해라, 그 다음 쿠킹하고, 이 테스트 실행하고 등) 어떤 아웃풋을 내기 위해 시퀀스로 실행되는 태스크로 이루어집니다. 한 대상 (즉 노드나 네임드 아웃풋) 빌드 요청을 받으면 BuildGraph 는 그를 위해 필요한 그래프 내 모든 노드를 실행합니다. 다른 빌드 툴과 달리 BuildGraph 는 makefile 같은 스크립트 언어와 빌드 팜 환경설정 스크립트 중간의 하이브리드로 디자인되어 있습니다. 각 단계 실행 대상이 되는 머신 유형에 대한 주석이 가능하여, 한 단계가 실패한 경우 실패 알림 수신 목록을 제공할 수 있고, 사용자가 명시적으로 발동한 이후에만 실행시켜야 하는 노드를 그룹으로 묶을 수도 있습니다. 태스크 실행에서의 아웃풋 파일 생성을 트래킹하여 그래프 실행이 머신 팜에 고루 분배될 수 있도록 (그래서 가급적 노드가 병렬 실행되도록), 그리고 네트워크를 통해 주고 받는 중간 부작용도 자동 공유되도록 할 수 있습니다. 에픽에서는 BuildGraph 를 사용하여 UE4 바이너리 릴리즈를 준비하고, 마켓플레이스의 샘플을 패키징하고, (다른 것 보다도) 자체 게임에 쓰이는 파이프라인을 구현합니다. `[UE4Root]/Engine/Build/Graph/Examples` 디렉터리에 예제 BuildGraph 스크립트가 여럿 제공되어 있으며, UE4 바이너리 배포 버전 제작을 위한 스크립트는 `[UE4Root]/Engine/Build/InstalledEngineBuild.xml` 에 있습니다. Visual Studio 로 스크립트를 열면 `[UE4Root]Engine/Build/Graph/Schema.xsd` 에 위치한 스키마를 사용하여 편집 도중 리치 툴팁, 검증(validation), Intellisense 기능을 제공합니다. ## BuildGraph 스크립트 작성 별도의 **BuildGraph** 스크립트 작성 방법을 배우기 위해서는, 그래프 제작에 들어가는 여러 부분을 알아두면 좋습니다. 그래프 제작은 다음과 같은 엘리먼트로 이루어집니다: * Tasks: 태스크 - 빌드 프로세스의 일부로 실행되는 동작입니다 (컴파일, 쿠킹 등). * Nodes: 노드 - 아웃풋을 만들기 위해 실행되는, 순서대로 실행되는 태스크의 네임드 시퀀스입니다. 다른 노드에서 태스크를 먼저 실행해야 이 노드 실행이 가능한 경우도 있습니다. * Agents: 에이전트 - (빌드 시스템의 일부로 실행되는 경우) 같은 머신에서 실행되는 노드 그룹입니다. 로컬 빌드시 에이전트는 효과가 없습니다. * Triggers: 트리거 - 수동 개입 이후에만 실행되어야 하는 그룹에 대한 컨테이너입니다. * Aggregates: 어그리게이트 - 하나의 이름으로 참조 가능한 노드 및 네임드 아웃풋 그룹입니다. 스크립트는 보통 재사용 가능하거나 조건에 따라 정의되는 값에 대해 프로퍼티를 자주 사용합니다. 프로퍼티는 `` 엘리먼트로 선언되며, 첫 선언 지점까지 영역이 지정됩니다. `$(Property Name)` 기호로 참조된 프로퍼티는 모든 어트리뷰트 스트링에서 유효하며, 스크립트가 읽힐 때 확장됩니다. 사용자가 명령줄에서 제공할 수 있는 프로퍼티는 `