The Distributed Builds is an extension to the base Continuum functionalities that gives us the ability to process multiple independent builds beyond the capacity of a single server's processing power. It also enables us to execute builds on multiple different platforms while retaining a unified view of all project builds.
Continuum follows a Client-Server model using XML-RPC as the protocol. However, since it uses a bi-directional XML-RPC implementation, we instead distinguish the components by calling them Master and Build Agent.
The Master is a Continuum instance that has the ability to delegate the builds to registered Build Agents.
The Build Agent is a standalone Jetty-bundled webapp that listens for any build requests from the Master it is assigned to.
There is a one-to-many relationship between the Master and the Slaves. A Master may have many Build Agents, but each Build Agent can only have one Master.
TODO: insert image here
Distributed Builds happen at the project group level of Continuum. When the entire project group is built in the Master, independent projects (single project or multi-module project) are distributed to any available registered Slave. A Slave is said to be available when it is currently not building anything as it can only attend to a single build request from the Master.
In a project group containing a mix of projects, the distribution of work goes through the following steps:
TODO: insert sequence diagram here
WARNING Need to have a central remote repository to store the artifacts created from the build agent so that other agents will be able to use the new artifacts.