Continuous Integration Applied

A place for experience exchange about strategies and tools for ContinuousIntegration.

But remember that ContinuousIntegrationIsLessAboutToolsThanItIsAboutDetermination

In , Martin Fowler and Matt Foemmel describe CruiseControl, the open source continuous build environment they've built at ThoughtWorks.

AntHill [ UrbanCode ], is a continuous build tool that takes a different approach...

see the continued discussion at AntHillvsCruiseControl
At the the jwam team presented the JwamIntegrationServer (

The ItWps? team has now released the open-source project IntegrationGuard as the successor of the JwamIntegrationServer.
ContinuousIntegration with VisualAge For Java:
The equivalent to "cvs update" in VisualAge / ENVY seems to be that the user needs to know a bit (or many bits) too much about the VisualAge repository.

It would be interesting to see someone make something like CruiseControl work directly in the VA repository.


Request the feature

Adding a new repository type to CruiseControl is a two-step processes. First, we need to have a task that will actually fetch changes down... the Ant community has provided all of them so far. The second is that we need a SourceControlElement? to query for the updates. Right now, we don't have one for VAJ. We could write one, but we've had other things on our mind. If anyone wishes to write one, I'd be glad to assist them -- RobertWatkins.

I know of at least one group who is using CruiseControl with C++/COM. --JasonYip

CruiseControl doesn't actually build your system; that's left up to Ant. All CruiseControl does is check your repository for updates, then tell Ant to update and build your system. CruiseControl has support for VisualSourceSafe, if that's what you're using, but we lack some major commercial vendors (such as ClearCase). Version 2.0 of CruiseControl supports ClearCase and many other SCM tools --SteveDonie The important thing, from CruiseControl's point of view, is to have a working Ant build script. Ant is largely geared around Java compilation. However, there are people out there using Ant to build C++ programs. I don't know about C#, however. One option that would be very feasible (as in, I've actually done this before) would be to use Ant as a wrapper for your existing make environment (if you have one). This would allow you to integrate existing makefiles (or Visual C++ project files) into an Ant environment that can take care of other auxillary tasks (updating from the repository, publishing the builds, building doco, etc), and the wrapper Ant build script can then in turn be integrated into CruiseControl. -- RobertWatkins

The JwamIntegrationServer also is independent from the programming language. It uses a component model which makes it possible to plug in arbitrary tools (like compiler, unit testing tools, ANT etc.). We use it for Java but another project is using it for a PHP3 project. -- StefanRoock

People don't seem to really grasp the fact that you can use Java programs to develop in other languages. I think there needs to be more awareness of great tools like Ant.

You may like a new article on Martin Fowler's site that describes experiences using ci with C++ (MSVC) and COM -- SteveLee

Can someone please explain how this is different than just syncing to the tree? Usually source code systems have a way to sync to the tree and you can do it any time you want.

The main difference is that the system is recompiled and tested on the server. If you use a VCS you need strong conventions to ensure not to break the server side code base. Just using the VCS in a naive way may cause testing conflicts. You need a SingleReleasePoint. It can be realized with other techniques than CruiseControl or the JWAMIntegrationServer but these tools are simply convenient and enforce the conventions.

Especially in projects where not all developers have a sound XP experience the conventions are often broken by "newbies" causing corrupt server side code.

-- StefanRoock

This is a great example of the UnixWay. CVS does not come out of the box with server-side integration support, but it does come with hooks that can be used to add just about any feature you can script up. You don't need to go buy more tools, and in fact, usually you can find the tools you want distributed as FreeSoftware somewhere, if not formally then informally.

What are some of the gotchas with ContinuousIntegrationApplied to projects where the database schema is under active development?

Ensuring that data is not lost when upgrading schemas would be very important when releasing to production.

We're using the ant task 'splash' to (optionally) show a comic during the build of our project. We did it for amusement value but it's quite a useful incentive to build at least once a day (to see the new comic strip). Here's the Ant task in case you don't want work it out yourself.

  <target name="comic">
	  <format property="comicname" pattern="yyyyMMdd" offset="0" unit="day"/>
	<splash imageurl="${comicname}.gif"/>

It's best to not have it called by default as the 'splash' target is currently not intelligent enough to handle the lack of a windowing system.

-- PaulRuane

We use CruiseControl with multiple projects and have written up our approach in a couple of blog entries:

-- Jtf

EditText of this page (last edited August 24, 2004) or FindPage with title or text search