The more I use CruiseControl, the more I am annoyed by it limited functions:
  • it seems to have troubles with large logfiles and a big number of JUnit test results - at least I always get an OutOfMemoryError when CruiseControl tries to parse the XML files
  • it can just monitor the exit code of a build script. For example, I want to receive an email if some JUnit tests have failed (while the build itself did succeed) - not possible with CruiseControl
  • and some other issues I don't remember right now.
Thats why I will have a look at Hudson: Also open-source, but more flexible...

Update

The main advantage about Hudson: It is very easy to use (setup took me about a minute).
However, having a running CruiseControl, I see no reason for a change - in fact, I like CruiseControl's minimalistic web interface better...
But for a newbie on continuous integration tools, I would suggest to start with Hudson.