Epic’s Build Tools & Infrastructure

Slides:



Advertisements
Similar presentations
How We Manage SaaS Infrastructure Knowledge Track
Advertisements

Module 13: Performance Tuning. Overview Performance tuning methodologies Instance level Database level Application level Overview of tools and techniques.
New Release Announcements and Product Roadmap Chris DiPierro, Director of Software Development April 9-11, 2014
Ranorex Appium Calabash
Jenkins User Conference San Francisco, Sept #jenkinsconf Business Process Model & Notation (BPMN) Workflows in Jenkins Max Spring Cisco
Jenkins User Conference Jenkins User Conference Israel, 06 June 2013 #jenkinsconf Pre-Tested Commits with Jenkins and Reviewboard Yardena Meymann VMware.
Test Case Management and Results Tracking System October 2008 D E L I V E R I N G Q U A L I T Y (Short Version)
Copyright © 2002 W. A. Tucker1 Chapter 1 Lecture Notes Bill Tucker Austin Community College COSC 1315.
Extensibility in UE4 Customizing Your Games and the Editor Gerke Max Preussner
Validata Automated Build & Configuration (ABC)
Engine Overview A Programmer’s Glimpse at UE4 Gerke Max Preussner
Mike Azocar Sr. Developer Technical Specialist Microsoft Corporation
Slide 1 of 9 Presenting 24x7 Scheduler The art of computer automation Press PageDown key or click to advance.
Niklas Smedberg Senior Engine Programmer, Epic Games
ISPW Natural Demo Mar 2011 Created by the kindness of CN Rail using the their Test ISPW system Through the efforts of Paul Vaenas CN - IT - Release Management.
How WebMD Maintains Operational Flexibility with NoSQL Rajeev Borborah, Sr. Director, Engineering Matt Wilson – Director, Production Engineering – Consumer.
Git for Version Control These slides are heavily based on slides created by Ruth Anderson for CSE 390a. Thanks, Ruth! images taken from
 Cloud computing  Workflow  Workflow lifecycle  Workflow design  Workflow tools : xcp, eucalyptus, open nebula.
COMP-14: Automating your deployments using ANT Gary S Clink Business Consultant.
London April 2005 London April 2005 Creating Eyeblaster Ads The Rich Media Platform The Rich Media Platform Eyeblaster.
AUTOBUILD Build and Deployment Automation Solution.
London April 2005 London April 2005 Creating Eyeblaster Ads The Rich Media Platform The Rich Media Platform Eyeblaster.
Python: An Introduction
Section 1: Introducing Group Policy What Is Group Policy? Group Policy Scenarios New Group Policy Features Introduced with Windows Server 2008 and Windows.
Configuration Management (CM)
Branching. Version Control - Branching A way to write code without affecting the rest of your team Merge branches to integrate your changes.
Version control Using Git Version control, using Git1.
IT 456 Seminar 5 Dr Jeffrey A Robinson. Overview of Course Week 1 – Introduction Week 2 – Installation of SQL and management Tools Week 3 - Creating and.
Perforce Software Version Everything.. Visual Studio Industry Partner Perforce Software NEXT STEPS Contact us at: Perforce products.
Developing software and hardware in parallel Vladimir Rubanov ISP RAS.
INFSO-RI Enabling Grids for E-sciencE SCDB C. Loomis / Michel Jouvin (LAL-Orsay) Quattor Tutorial LCG T2 Workshop June 16, 2006.
Presentation Name / 1 Visual C++ Builds and External Dependencies NAME.
Test Specifications A Specification System for Multi-Platform Test Suite Configuration, Build, and Execution Greg Cooksey.
PRIOR TO WEB SERVICES THE OTHER TECHNOLOGIES ARE:.
Configuration Management CSCI 5801: Software Engineering.
Anubha Gupta | Software Engineer Visual Studio Online Microsoft Corp. Visual Studio Enterprise Leveraging modern tools to streamline Build and Release.
Optimal Pipeline Using Perforce, Jenkins & Puppet Nitin Pathak Works on
The Road to Continuous Delivery at Perforce Jonathan Thorpe Technical Marketing Manager Perforce Laurette Cisneros Build & Release Engineering Manager.
Anritsu Automation Platform (AAP) AAP PC Connects to the system via IP connection (system switch) AAP was developed to add features that were requested.
K. Harrison CERN, 22nd September 2004 GANGA: ADA USER INTERFACE - Ganga release status - Job-Options Editor - Python support for AJDL - Job Builder - Python.
IPS Infrastructure Technological Overview of Work Done.
The Development Process Compilation. Compilation - Dr. Craig A. Struble 2 Programming Process Problem Solving Phase We will spend significant time on.
EValid LoadTest, eV.manger and Validation. Agenda Load Test capability of eValid How to execute load test by using eValid Introduction to eV.manager Validation.
2014 Build & Infrastructure Engineering What It Is and Why You Need It Na’Tosha J. Bard October 9, 2014 #GHC
Release Management for Visual Studio 2013 Ana Roje Ivančić Ognjen Bajić Ekobit.
Some of the utilities associated with the development of programs. These program development tools allow users to write and construct programs that the.
1 Ivan Marsic Rutgers University LECTURE 2: Software Configuration Management.
DECTRIS Ltd Baden-Daettwil Switzerland Continuous Integration and Automatic Testing for the FLUKA release using Jenkins (and Docker)
Introduction Aaron Day ● Software Architect ● Open Solutions Interests and Hobbies ● Family ● Software Development ● Woodworking ● Gaming ● Shooting.
Version Control Systems
Process improvements for better quality
Implementing Cloud-based Agile Team Development - Lessons Learned
CST 1101 Problem Solving Using Computers
Source Control Systems
Proposed IT Infrastructure for TOP OS project
LECTURE 2: Software Configuration Management
Understanding how XContinuousIntegration (Xci)
PYTHON: AN INTRODUCTION
4th Forum How to easily offer your application as a self-service template by using OpenShift and GitLab-CI 4th Forum Alberto.
GLAST Release Manager Automated code compilation via the Release Manager Navid Golpayegani, GSFC/SSAI Overview The Release Manager is a program responsible.
Version Control Systems
DevOps in an Embedded Environment
Source Code Management
LECTURE 3: Software Configuration Management
TRANSLATORS AND IDEs Key Revision Points.
X in [Integration, Delivery, Deployment]
Simplified Development Toolkit
Exploring the Power of EPDM Tasks - Working with and Developing Tasks in EPDM By: Marc Young XLM Solutions
Git CS Fall 2018.
SSDT and Database Project Basics
Presentation transcript:

Epic’s Build Tools & Infrastructure Build Automation Epic’s Build Tools & Infrastructure Gerke Max Preussner max.preussner@epicgames.com Prepared and presented by Gerke Max Preussner for West Coast MiniDevCon 2014, July 21-24th Email max.preussner@epicgames.com in case of comments, questions or suggestions or visit our AnswerHub at http://answers.unrealengine.com Hi, my name is Max, and I would like to tell you a little bit about our build tools and how we use them for automating our build processes at Epic Games.

Sorry, we ran out of cats for this presentation But first I want to apologize for the lack of cats in this presentation. After doing all the previous presentations, we simply ran out of cats.

Build Tools UHT UBT UAT Unreal Header Tool (UHT) Written in C++ Parses all C++ headers containing UClasses Generates glue code for all Unreal classes & functions Generated files stored in Intermediates directory The three main tools you will come across are Unreal Header Tool, Unreal Build Tool, and Unreal Automation Tool. If you visited one of our programming talks earlier today, you will already know that mark up our C++ classes and functions with special macros. UHT is the tool that parses your header files and converts these macros into magic glue code to enable powerful features like Run-time Reflection and Network Replication. All code generated by UHT is stored in the Intermediates directory, and you will likely never have to look at it, ever.

Build Tools UHT UBT UAT Unreal Build Tool (UBT) Written in C# (may convert to C++ in the future) Scans solution directory for modules and plug-ins Determines all modules that need to be rebuilt Invokes UHT to parse C++ headers Creates compiler & linker options from .Build.cs & .Target.cs Executes platform specific compilers (VisualStudio, LLVM) Other UBT Features Project file generation (GenerateProjectFiles.bat) Remote Compilation (iOS, MacOS) Unreal Build Tool is our custom solution to compiling and building the Engine and your projects. When you compile in Visual Studio or XCode, we don’t actually use either one to perform the compilation, but everything goes through UBT instead. UBT also contains the logic for generating your project and solution files when you run the GenerateProjectFiles.bat batch file.

Build Rules UBT uses the special C# files *.Build.cs and *.Target.cs that you create inside your module directories to figure out what it needs to do. Here you can see the build and target rules files for QAGame, a special game that our QA team uses for internal testing.

Dependency Graph Another little known feature of UBT is the ability to generate dependency graph data that can be visualized. Here is a screenshot of a JavaScript based visualizer that shows a section of our code base.

Build Tools UHT UBT UAT Unreal Automation Tool (UAT) Written in C# (may convert to C++ in the future) Automates repetitive tasks through Automation Scripts Build, cook, package, deploy and launch projects Invokes UBT for compilation Other UAT Scripts Analyze and fix up game content files Code surgery when updating to new Engine versions Distributed compilation (XGE) & build system integration Generate code documentation Automated Testing of code and content And many others – you can add your own scripts! Last but not least, we have Unreal Automation Tool. Like UBT, it is currently written in C#, and you can think of it as batch files on steroids. We use it for a wide range of tasks that we wish to automate, and you can easily add your own scripts, too. The most frequently used automation tasks have to do with building, cooking, packaging, deploying and launching your projects. UAT also performs a number of other common tasks, such as generating documentation and automated testing.

UBT, UHT, UAT Projects The full source code for all three tools is included with the Engine. You can find it in the Engine’s “Programs” directory on GitHub.

Build Automation SCC CIS Promotion Testing Source Code Control (SCC) We use Perforce, but you don’t have to Not just code, but also content and everything else Also contains compiled binaries from build system (!) Used to version many other things (Markting, QA, etc.) GitHub Integration Check-ins are pushed to GitHub Master in near real-time Script for converting GitHub pull requests to P4 CLs At Epic we use these three tools to automate our daily production workflows. For our internal version control system we use Perforce, but we also support Subversion out of the box. Programmers in the community are working on plug-ins for other source code control systems, such as Git and Mercurial. In case you wonder how the Engine files get from our Perforce to GitHub: we have scripts for automatically converting between the two.

Build Automation SCC CIS Promotion Testing Continuous Integration System (CIS) Verifies all check-ins of code and content Grand Unified Build Process (GUBP) Thousands of build tasks a day Backend Software Used custom build server for several years Experimented with Jenkins, but not scalable enough Now using Electric Commander Complex workflows with hundreds of jobs and sub-tasks Build Hardware Virtualized farm of Windows and MacOS build servers Every single code or content check-in made to our Perforce server will be verified by our Continuous Integration System (CIS). It consists of a farm of build servers that run special software for making and verifying distributed builds. In the past we have created our own CIS software, but we recently switched to off-the-shelf products. With thousands of daily build tasks for several games across up to ten different platforms, only Electric Commander was able to meet our needs. We also experimented with open source systems, such as CruiseControl and Jenkins, which will likely be sufficient for small to medium sized studios.

GUBP Our build engineers recently developed a special build process called the Grand Unified Build Process. It intelligently minimizes the number of modules that have to be built for the various build configurations and build targets. For most game studios a regular build script will suffice.

Build Automation SCC CIS Promotion Testing Build Promotion Selected successful CIS builds are tested by QA Builds that pass QA will be promoted to stable Selected stable builds become release candidates Approved stable builds are released to public Some of the builds that pass CIS are then picked up by our QA team to search for bugs and other problems. When a build is found to be stable enough for distribution, the QA team will mark it as ‘promoted’ in our build system.

Build Automation SCC CIS Promotion Testing UnrealSync Tool for artists to fetch the latest promoted build Aware of P4 branches and projects Notifies user when new promoted build is available Promoted builds are made accessible to our artists through a small tool called UnrealSync. UnrealSync runs in the system tray and notifies our artists when a new promoted build is available. Artists can then use it to sync their branches to the latest promoted label.

Build Automation SCC CIS Promotion Testing Automated Testing Simple and complex tests Unit tests for C++, content verification Parallel testing on multiple platforms & devices Can also run from command line (as a Commandlet) Simple Tests Single atomic test that can pass or fail Unit tests for C++, feature tests for content Examples: Play a map in PIE, verify text wrapping in Slate, etc. Complex Tests Run same test code on a number of inputs Examples: Load all maps in the Editor, compile all Blueprints, etc. Our QA team has to perform a large number of very repetitive tests, especially during regression testing. One common, time consuming and extremely boring task is to ensure that all maps still load without errors in the Editor. Our Automation Test Framework can be used to automate these kinds of tasks. We are also starting to embrace Test-Driven Development (TDD) with the help of C++ unit tests. The Automation Test Framework can handle these as well.

Simple Automation Test // Example for a simple automation test that runs in a game IMPLEMENT_SIMPLE_AUTOMATION_TEST(FSetResTest, "Windows.SetResolution", ATF_Game) bool FSetResTest::RunTest( const FString& Parameters ) { FString MapName = TEXT("AutomationTest"); FEngineAutomationTestUtilities::LoadMap(MapName); int32 ResX = GSystemSettings.ResX; int32 ResY = GSystemSettings.ResY; FString RestoreResolutionString = FString::Printf(TEXT("setres %dx%d"), ResX, ResY); ADD_LATENT_AUTOMATION_COMMAND(FEngineWaitLatentCommand(2.0f)); ADD_LATENT_AUTOMATION_COMMAND(FExecStringLatentCommand(TEXT("setres 640x480"))); ADD_LATENT_AUTOMATION_COMMAND(FExecStringLatentCommand(RestoreResolutionString)); return true; } Here is a simple (and not very useful) automation test for setting and resetting the screen resolution.

Automation Test Demo It’s not a cat, it’s a dragon! [demo of Automation Tests in the Editor’s Session Frontend UI]

Questions? Documentation, Tutorials and Help at: AnswerHub: Engine Documentation: Official Forums: Community Wiki: YouTube Videos: Community IRC: Unreal Engine 4 Roadmap lmgtfy.com/?q=Unreal+engine+Trello+ http://answers.unrealengine.com http://docs.unrealengine.com http://forums.unrealengine.com http://wiki.unrealengine.com http://www.youtube.com/user/UnrealDevelopmentKit #unrealengine on FreeNode