In TFS 2010 TeamBuild was rewrote. The engine is now based on Workflow Foundation 4.0 and the architecture is now distributed. In this post I’ll present the new architecture.
TeamBuild 2010 is composed of two components linked to the Team Project Collections:
The BuildController is link to a single collection (a collection can have multiple BuildControllers) and does all the work which doesn’t invoke heavy processor and disk usage:
- Updating the build number.
- Creating the drop location.
- Selecting the BuildAgent.
- Executing the build on the BuildAgent.
- Check in the changes associated to a gated checkin.
The BuildAgent is link to a single BuildController and do all the heavy work:
- Creating the workspace.
- Getting the source files.
- Labeling the source.
- Linking with changesets.
- Symbols publication.
As you can see in the previous schema, a BuildController can have multiple BuildAgent which enables native load balancing
Each BuildAgent can also be tagged to differentiate build configuration and these tag can be specified in a build definition to help select the correct BuildAgent. For example : you can install BizTalk on a build machine and tag all it’s BuildAgent with “biztalk”. You can now add the “biztalk” tag to all your build definitions for BizTalk projects and the BuildController will select the first free BuildAgent which was configured for BizTalk
From a physical perspective, all those components doesn’t have to be on the same machine. Each component can be on a separate machine, the only constraint is that only on BuildController can be installed per machine. Here is a simple deployment example:
In this example each collection has an associated BuildController:
- The BuildController for the collection A is physically on another machine with it’s associated BuildAgents.
- The BuildController for the collection B is on the same machine as the TFS applicative tiers but it’s two BuildAgents are on two machines. One BuildAgent has a “biztalk” tag and is configured for building BizTalk projects.
It’s also good to know the all the BuildController and BuildAgent configuration is saved in TFS.
I have two words to conclude : IT ROCKS
Can two Team Project Collections share one Build Controller? Thanks.
A Build Controller can only be used by one Team Project Collections. You can only have one Build Controller per computer (it’s a Windows Service), so you’ll need one build machine per Team Project Collection. Note that a build controller can be host in a virtual environment.