Defining Agent Types in BuildGraph
When setting up a BuildGraph script, you must define agent types explicitly. This is done using the Type attribute inside an Agent tag:
<Agent Name="Compile Clients" Type="CompileWin64">
If you run the script locally, this definition has no direct impact. However, when executed using Unreal Horde, the agent type plays a crucial role in selecting a compatible agent. If no matching agent is available, the build will fail.
Agent Type Mapping in Horde
To ensure agents are properly matched in Horde, agent types must be defined inside the build stream configuration file (typically named something like Project-Stream.stream.json). This file includes an agentTypes section that maps agent types to specific pools and workspaces:
"agentTypes":
{
"Win64":
{
"pool": "win-ue5",
"workspace": "Full"
},
"CompileWin64":
{
"pool": "win-ue5",
"workspace": "Full"
}
}
The workspace parameter refers to a workspace type defined elsewhere in the same file.
Defining Workspace Types
Horde uses workspace types to determine how Perforce workspaces should be set up and managed for different agents. These are defined in the workspaceTypes section:
"workspaceTypes":
{
"Full":
{
"identifier": "MyStream",
"method": "name=managedWorkspace&preferNativeClient=true"
},
"Incremental":
{
"identifier": "MyStreamI",
"incremental": true,
"method": "name=managedWorkspace&preferNativeClient=true"
}
}
Fullworkspaces ensure that everything is fully synchronized for the build.Incrementalworkspaces avoid cleaning workspace contents after each build to optimize performance.
Configuring Agent Pools in Horde
Agents in Horde are grouped into pools based on their platform and capabilities. These pools are defined inside globals.json:
"pools": [
{
"name": "Win-UE5",
"condition": "Platform == 'Win64'",
"color": "Blue"
},
{
"name": "Win-UE5-GPU",
"condition": "Platform == 'Win64' && Interactive == true",
"color": "Blue"
},
{
"name": "Mac-UE5",
"condition": "Platform == 'Mac'",
"color": "Green"
},
{
"name": "Linux-UE5",
"condition": "Platform == 'Linux'",
"color": "Orange"
}
]
When an agent connects to Horde, it is assigned to one or more pools based on the defined conditions. An agent may belong to multiple pools, allowing it to be used flexibly across different build tasks.