Apache Gump™
What is Apache Gump™?
The Apache Gump continuous integration tool was the first one developed at the Apache Sofware Foundation. It is written in Python and fully supports Apache Ant, Apache Maven (1.x to 3.x) 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 many 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 Gump, project definitions are mapped from XML into in memory objects for processing. Scripts execute SCM 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/Makefile/pom.xml files from the projects, but do not use the scripts or jar files checked into CVS/SVN. Instead, Gump tries to play several tricks in order to ensure that Gump's versions of files are used.
In order to really build against the latest versions of everything, Gump will need support from the build process, the build tool or has to find its way around the build tool.
The Apache HTTPd builds are an example for a build process that supports Gump. HTTPd needs APR and Gump can provide the path to the freshly built APR files as command line options to the buildconf and/or configure scripts.
In Ant's case
Gump set's Ant's build.sysclasspath to only and manages the system classpath:
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.
Note that Gump uses the svn trunk version of Ant when building Ant projects.
For Maven 1.x builds, Gump runs maven with the --offline switch and uses jar overrides. Sometimes the artifact ids expected by maven and Gump's names of the jars don't match, in which case <property> elements have to be used to get the correct artifact ids.
So far Gump's support for Maven 2.x and later uses the most complex approach, for the full story see the section on the mvn2 builder.
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.
The "official" Gump run on vmgump will optionally send e-mails to various newsgroups upon build failures.
Where is Gump?
When does Gump run?
Gump runs continually in various locations, primarily on Apache hardware, see below.
Site | JVM | Comments |
---|---|---|
Apache (vmgump - Ubuntu Linux) | OpenJDK 6 | up to 4 times daily |
Apache (FreeBSD) | 1.6 | up to 4 times daily |
Apache (Adam - Mac OS X Server) | Apple's Java 1.6 | up to 4 times daily |
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.
Trademarks
Apache Gump, Gump, Apache, the Apache feather logo, and the Apache Gump project logos are trademarks of The Apache Software Foundation.
Java is a registered trademarks of Oracle Corporation. All other product names mentioned herein and throughout the entire web site are trademarks of their respective owners.
by Sam Ruby, Adam Jack, Community