Hi,
Our team in exist came up with a requirements for distributed builds.
*A. Distribution of work*
Master and Slave Agent will communicate with each other through
xml-rpc.
1. Master Agent - controls build via xml-rpc
1. slaves need to be added to the master server
- attach the slave to a build environment as a type of
"installation". Each slave reports a number of available installations.
2. check availability of slaves
- slave is available if it's up and has no current build.
- if slave is available then dispatch build to the slave.
- if slave is unavailable then enqueue build on the master
3. distribute work
- select slave based on build environment (master)
- build
- pass current configuration
- expect result (master)/return result (slave)
- attach each result returned by the slave to each project in
the group (add to database)
2. Slave Agent - is a dumb build agent that will run on another
build server. It will only build the project and return the result. It also
has it's own installation.
- queried for available installations
- start build, stop build
- returns build result
*B. UI/Configuration*
1. Aggregated view of distributed projects
2. Slave server list (new page)
3. Build Environment
- add slave selection
- modify installations based on slave selection
4. distributed build configuration stored and editable in XML
configuration file
Limitations
- credentials (s.a. svn credentials) are passed along if specified, but
if server cache is used it will need to be done individually on the slaves
- slaves can only be configured at the project group level, by a system
administrator
- project dependencies are not considered in distribution -
interdependent projects should target the same slave server
Future Enhancements
1. Policy-based distribution
- next available
- load balanced
- target environment matching
Comments, suggestions and/or violent reactions are welcome :)
Thanks,
--
Marica