I'm a SW developer who has some experience configuring continuous integration solutions, but I am not very familiar with the pluses and minuses of certain continuous integration strategies, and would like advice as to the benefits and challenges of two server management strategies.
We have 3 separate, complex, Android applications for which I am creating continuous integration servers. I've successfully created a prototype virtual machine running Windows Server 2008 which successfully compiles the code, launches an emulator and runs android unit tests. Separately I have also been able to run the static analysis that we wish to run on this code to provide developers with feedback.
In previous configurations using CruiseControl.NET instead of jenkins, we had success in maintaining 3 separate virtual machines, all with independent virtualized hardware. The benefits of this setup is compartmentalization - one project can change their build server without the other project being affected.
However, moving to Jenkins, I note that it supports master/slave nodes, which could allow me to configure one Jenkins master instance with multiple projects, and then configure a number of slave nodes which, as I understand it, would perform any Jenkins tasks - the compilation, unit testing, static analysis and pass this information back to the master server. The benefits of this setup seem to be:
- Scalability - I can easily add a 4th or 5th project and maintain the same number of slaves
- Requires setup of only 1 master and 3 slaves, which is probably easier to setup than 3 separate masters.
Challenges with this situation appear to be:
- I'll have to learn how to create slaves
- I'll have to handle the communication between the clients and slaves
- I may have issues running unit tests that require UI interaction - post describing how to run headless slaves
Are there any other immediate benefits or challenges that I have forgotten, or does someone who has experience setting up jenkins have an opinion as to which approach would be more appropriate?