[CMake] continuous integration with CMake

Tyler Roscoe tyler at cryptio.net
Fri Dec 4 11:42:21 EST 2009


On Thu, Dec 03, 2009 at 09:32:48AM -0500, Bill Hoffman wrote:
> We are working on being able to drive builds from CDash itself. 
> However, it is not really that hard to manage the multiple test machine 
> cronjobs.  What we do at Kitware is create a version controlled script 
> directory.   Each machine gets a single driver script that can run ctest 
> for the machine.   You setup two cronjobs or scheduled tasks on the 
> machine.  The first one updates the script directory.  The next one runs 
> the script or bat file for the machine.   Then if you want to manage the 
> individual machines you can just update the one script.   Also, since 
> our projects are open source it allows CMake to easily take builds from 
> anyone, and they don't have to give up control of the machine or install 
> any special services.   Our planned approach for CDash driven builds 
> will be to install one cron task or scheduled task that runs a ctest 
> that connects to a CDash server and offers the machine for builds. With 
> any approach you will have to install something on all clients anyway.

Hey Bill. Thanks for the reply.

Are your update and driver scripts available somewhere for me to study? 

I agree that CDash's design works very well for widely-distributed
builds where you don't have a lot of control over the individual build
machines and want to keep configuration simple for people who want to
join your build cluster.

The solution we currently have sounds a lot like your setup: a cron that
updates the build scripts and then a cron that runs the build scripts.
Maybe I'm overreacting a bit since my CMake projects are fairly immature
and we still muck arouund with things quite a bit, but this approach
looks like it will be fairly labor intensive to maintain once I have
four projects and twelve platforms to keep tracck of. 

How do you proceed when you're getting close to a release and one of the
testers comes to your office and says, "Oh, hey, we need debug builds on
all platforms to track down some weird bug". You can add your debug
build to your build script, but then you have to visit each machine
that's running continuous builds, tell them to stop what they're doing
and reload their configuration so that they can run this one-off build,
then go back to normal.

I could hack around this specific problem, but there are dozens of
similar scenarios and if each of them involve a bunch of manual steps it
will rapidly become unpleasant to be a lonely build engineer.

I understand that CDash isn't really written to solve this class of
problem, but this class of problem is quite common so I'm hoping others
out there in the CMake community have found some more robust solutions.

Thanks,
tyler


More information about the CMake mailing list