Jenkins CI/CD for Unreal Engine: Archived Setup and Modern Pipeline

Archived implementation note. This 2021 video demonstrates an older Jenkins + Unreal Engine 4 client/server setup. The broad architecture is still useful, but the original configuration should not be copied verbatim. Modern Unreal CI should be defined in versioned pipeline code, execute independent stages in parallel where resources allow, and publish logs and test artifacts for every build.

What a reliable Unreal CI pipeline needs

  • A versioned Jenkinsfile or equivalent pipeline definition, reviewed alongside the project.
  • Clean or carefully versioned workspaces so generated files do not leak between builds.
  • Separate client, server, cook/package, and test stages with explicit artifact handoff.
  • Toolchain and engine versions pinned on workers.
  • Archived AutomationTool, UnrealBuildTool, test, and packaging logs on both success and failure.

A practical stage model

pipeline {
  agent none
  stages {
    stage('Sync and validate') { agent { label 'unreal' }; steps { checkout scm } }
    stage('Build') { parallel {
      stage('Client') { agent { label 'unreal' }; steps { sh './BuildClient.sh' } }
      stage('Server') { agent { label 'unreal' }; steps { sh './BuildServer.sh' } }
    }}
    stage('Automation tests') { agent { label 'unreal' }; steps { sh './RunTests.sh' } }
    stage('Archive') { agent { label 'unreal' }; steps { archiveArtifacts artifacts: 'Artifacts/**,Saved/Logs/**', allowEmptyArchive: true } }
  }
}

Failure modes worth designing for

Unreal builds fail for reasons outside source changes: exhausted disk, stale derived data, compiler version drift, license/service failures, and workers that differ from each other. Emit the engine version, changelist/commit, worker name, command line, and free disk in every build log. That context turns a red build from a mystery into a triageable incident.

Migration notes

Move job configuration into pipeline code before trying to optimize it. Then make the build reproducible on a fresh worker, split independent client/server work, and add a small automated smoke suite before expanding coverage. Keep secrets in Jenkins credentials rather than command lines or repository files.

References: Jenkins Pipeline documentation and Unreal Engine Automation Test Framework.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *