views:

125

answers:

5

I'm currently setting up a new build server and I'm interested in any suggestions the community may have about software such as Hudson or CruiseControl.NET that may simplify and add additional value to the build process.

Previously I had a build server set up using custom batch files which would run msbuild and other such tools and these were triggered by subversion hooks to allow for a continuous builds to be done per branch. The idea was that eventually we would also execute automated tests and/or static analysis although we never really got that far. This server also acted as our source code repository, a test machine for web project builds, and a web server for custom dashboard and portal for developers on the team.

At this point my thoughts are to separate some of the responsibilities of the old build server and at least a Build Server which is responsible only for creating builds, a web server which is responsible for acting as the intranet style dashboard site for developers, and perhaps an additional web server as the Subversion repository. If it turns out to be better or easier to keep the Subversion code on the same server as SvnServe then I'll probably opt to place the Subversion repository on the web server but still keep the build server separate. Having no personal experience with any of the popular build server and CI solutions out there I'm curious how CruiseControl.NET, Hudson or other solutions would fit into this type of configuration. It appears that both of CC.NET and Hudson have web interfaces for example but the documentation doesn't clearly layout how this plays out with different hardware/system configurations so I'm not sure if either requires the web portion to be on the build server itself or not.

As far as technologies I'm dealing with .NET/C# based code which is a mix of Web/WinForms/WPF and we use a few separate Subversion repositories to host these projects. Additionally it would be nice to support Visual FoxPro and Visual Source Safe for some legacy applications. I would also like to get more team members involved in monitoring builds and would like to eventual have developers create build setups for their own projects as well with as much simplicity as possible. Also I should mention that I have no experience setting up a Java based web application in IIS but I do have quite a bit of experience setting up and managing ASP.NET applications so if that may make .NET based products more favorable unless I can be convinced otherwise.

UPDATE (after researching Hudson): After all the recommendations for Hudson I started looking into what is involved to get it up and running on my two Windows 2008 servers. From what I can gather the web portion (master) would run on my webserver but it seems that IIS isn't supported so this would greatly complicate things since I want to host it on the same machine as my other web applications. On the build server, I would be installing a second copy of Hudson that would act as a slave and only perform builds that are delegated to it by the master. To get this to work I would be installing Hudson as a Windows Service and would also need to install some unix compatibility utilities. Unfortunately the UnxUtils download link appears to be broken when I checked as well so I can't really move forward until I get that resolved. All of this is really sounding just as complex if not more complex than installing CruseControl.NET. For now this unfortunately leaves me to looking into CruiseControl.NET and TeamCity.

UPDATE (about TeamCity): After looking into TeamCity a little closer I realized that at least the server portion is also written in Java and is deployed in a manner very similar to Hudson. Fortunately it appears that Tomcat can be used to host servlets inside IIS although I can't find a good straight forward guide to describe how to actually do accomplish this. So skipping that for now I looked further when I ran into what looks like what might be a major snag.

TeamCity Professional edition only supports TeamCity Default Authentication and does not support changing the authentication scheme.

Since windows authentication is likely the direction we will want to go, it's now looking like it might be back to evaluating CruiseControl.NET or possibly Hudson if I can get my hands on the UnxUtils and also find out more about how I can host the dashboard portion of Hudson within my existing IIS configuration. Any pointers?

A: 

I highly recommend using Hudson. Not only will it allow you to build .NET applications on a continual basis, but you can also run code analysis and unit tests as well. It's easy to install (just deploy a WAR file to a web server such as Tomcat) and has many configuration options. There is also a large number of plugins available that you can use, many written by other Hudson users. Best of all, it is free and actively supported.

Bernard
Thanks for the information and endorsement but I'm still a little unsure about whether Hudson will allow separation of the web portion of the product on to a separate machine from the build server. Also I should emphasis that I really prefer to use IIS as my web server although I'm possibly considering using Apache to get SVN to use NTLM and also to use some of the attractive repository viewer software out there.
jpierson
The Hudson engine will run on the same server than the application server (I don't think a pure webserver is enough). Hudson also comes with winstone build in, so that you don't need an app server. You can always front Hudson with a separate web server. The actual build process can run on a different machine. Usually you use Hudson slaves for that. You can attach more than one slave and Hudson can distribute the jobs according to load to different build machines. I haven't needed the load balancing yet. The slaves can run on different OSs so you can test your app with different cofigs.
Peter Schuetze
Interesting, I could be wrong but installing multiple instances of Hudson which from what I understand would require enabling IIS or some other web server on my build server in order to get this slave process to work seems to me like it begins to introduce a level of complexity that goes back on the supposed simplicity that is supposed to come along with Hudson and threatens to dirty up the build server which I'm trying to avoid. I have a feeling that I'm going to have to dig pretty deeply into CC.NET, Hudson, and other product documentation to really understand what will fit my needs.
jpierson
Please see the updates I added to my original question regarding Hudson. I'm still trying to understand what is possible and what is required with regard to hosting Java based web applications and trying also to figure out how I could get this working how I need.
jpierson
+1  A: 

For our decision making process we started with following overview.

http://confluence.public.thoughtworks.org/display/CC/CI+Feature+Matrix

Our main objective was java, easy to configure/use even after nobody created a job for 6 months. We moved away from a old version of Cruise Control, since nobody really knew how to use it. Some of the commercial products are nice if you want to go beyond just continuous integration. Have a look and decide for yourself.

Be careful, I don't know how up to date this matrix is. So some of the projects might have implemented more functions right now.

An interesting alternative could be Jira studio by Atlasian. If you use the hosted version you don't have much on support issues and it comes with subversion, bamboo, and goodies (jira+greenhopper, confluence, crucible, fisheye). http://www.atlassian.com/hosted/studio/

Peter Schuetze
+2  A: 

I'd vote for TeamCity here. Its is very, very easy to get stood up and running, integrates with all your .NET stuff without any trouble. The builds themselves are run by agents which can be on the build server or another machine depending on requirements--they could even be on a machine running an entirely different OS on a different network in a different country.

Wyatt Barnett
The concept of build agents in TeamCity seems very similar to the CC.NET Build Server whereas the build server as they are referring to it in TeamCity seems more like the Web Dashboard in CruiseControl.NET. In Hudson unfortunately everything seems to be all wrapped up to run on a single machine by default. So far I'm seeing much difference in the capabilities from this perspective but it seems that from peoples comments that the XML configuration in CC.NET must be pretty complex because many are opting for Hudson or TeamCity mainly for ease of GUI configuration of the builds.
jpierson
A: 

I agree with Wyatt Barnett. TeamCity is the best choice. It is very easy to configure and use. Moreover, TeamCity has a Free Professional Edition. Previously we used CruiseControl.NET on our project. This is also a powerful tool, but it is very complicated and hard to understand.

s.ermakovich
So far for my usage CruiseControl.NET actually seems to be the most simplistic because it matches very closely to what I'm looking for in that it requires installing a stand alone build service application on the build server and the dashboard can be placed on a separate web server. So far it seems that Hudson puts both together in one package to run on a single machine and with TeamCity it is a little unclear whether the "Build Server" is the dashboard or web front end or whether that is yet some other piece. I'm tempted to lean towards Hudson or TeamCity because of the recommendations but...
jpierson
In case of TeamCity, "Build Server" can be distributed over the network. TeamCity it`s actually a web front-end + service that monitors code repository, manages build agents, etc. You can use TeamCity without any locally installed build agents.
s.ermakovich
A: 

What s.ermakovich said: Both TeamCity and Hudson separate the web UI from build agents. You shouldn't need to install IIS on a build agent. You'd need to install a JVM and the agent software on any build node - very straightforward.

Julian Simpson