A place for experience exchange about strategies and tools for ContinuousIntegration
remember that ContinuousIntegrationIsLessAboutToolsThanItIsAboutDetermination
, Martin Fowler and Matt Foemmel describe CruiseControl
, the open source continuous build environment they've built at ThoughtWorks
], is a continuous build tool that takes a different approach...
see the continued discussion at AntHillvsCruiseControl
At the http://xp2001.org
the jwam team presented the JwamIntegrationServer
team has now released the open-source project IntegrationGuard
as the successor of the JwamIntegrationServer
- when used with ANT and CVS you can use the ANT VAJ Tasks.
- when used with ENVY and multiple projects in a baseline, the ConfigurationTool of CustomerCare is very helpful. It uses the package comments to store an XML structure that descibes the loaded projects and their editions. It lets you save you current setting (used on the integration machine, equivalent to cvs commit) or load a setting (used on all client machines, equivalent to cvs update).
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
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
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
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 http://www.martinfowler.com/articles/ciWithCom.html
. -- 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.
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.
<format property="comicname" pattern="yyyyMMdd" offset="0" unit="day"/>
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.
We use CruiseControl
with multiple projects and have written up our approach in a couple of blog entries: