What is Gump?
Gump is Apache's continuous integration tool. It is written in python and fully supports Apache Ant, Apache Maven and other build tools. Gump is unique in that it builds and compiles software against the latest development versions of those projects. This allows gump to detect potentially incompatible changes to that software just a few hours after those changes are checked into the version control system. Notifications are sent to the project team as soon as such a change is detected, referencing more detailed reports available online.
You can set up and run Gump on your own machine and run it on your own projects, however it is currently most famous for building most of Apache's java-based projects and their dependencies (which constitutes several million lines of code split up into hundreds of projects). For this purpose, the gump project maintains its own dedicated server.
How does Gump work?
With Traditional Gump, project definitions are converted from XML to scripts native to the platform on which you are running. With Python Gump the XML is mapped into in memory objects for processing. Scripts execute cvs or svn update commands for every module which contains a project being built, and invoke builds for each project in an order that ensures that dependencies are satisfied. Build outputs are processed and, if successful, dependent projects are then built on these outputs.
The commands use the actual build.xml files from the projects, but do not use the scripts or jar files checked into CVS/SVN. Instead, the CLASSPATH is set and properties are passed on the command line.
To quote Ant:
Only the system classpath is used and classpaths specified in build files, etc are ignored. This situation could be considered as the person running the build file knows more about the environment than the person writing the build file
The net effect is that every project is built every day with the latest version of every dependency - including the latest Ant, latest JUnit, latest XML parser.
The results are captured into html pages that largely are consistent with the style of the Jakarta project. An extensive amount of hypertext links are added to allow quick and easy navigation, and failures are color coded on the main build page.
A Perl script which is driven off of a naglist will optionally send e-mails to various newsgroups upon matching strings being found in the build output. This is typically used to alert developers of build failures.
Where is Gump?
When does Gump run?
Gump runs continually in various locations, primarily on Apache hardware, see below.
|Apache (Brutus)||1.4.2_04||Python Gump|
|Apache (Brutus) JDK15||1.5.0-beta2||Python Gump|
Who is Gump?
Gump was named after Forrest Gump, the title character in a movie. The process for building was to do a "Generate", followed by cvs "Updates", followed by a "Build All". This was repetitive, so a command was created to combine these operations - and it was named "guba". This sound this made when spoken reminded me of "Bubba Gump".
This seemed oddly appropriate as much of the motivation for Gump derived from the frustrations building Cocoon. The FAQ for that project indicate that the project was named after a movie that the creator of that project was particularly fond of, so it seemed fitting that this effort would be named after a movie.
A number of other fortunate coincidences proved this was the right choice for a name. From the role of the feather in the opening and closing scenes (something adapted to the Apache feature for the Gump icon), to the catch phase of "Stupid is as Stupid does" - something that captures the spirit of a large number of build errors caught by this process. And most significantly (to some) - the wisdom passed on from Gump's mother that "Life is like a box of chocolates - you never know what you are going to get!". I can think of no more apt description of a build process which takes the absolute latest versions of almost everything and attempts to build them together!
Why was Gump written?
That question is complex enough that it deserves a separate page.
by Sam Ruby, Adam Jack, Community