Setting up Continuous Integration
So let's look at a real working continuous integration environment that has been extended to performance testing, the one I use daily in my work.
There are various continuous integration servers available, but for this exercise I chose CruiseControl (cruisecontrol.sourceforge.net). After downloading and installing the Windows version, the first step is to check out a copy of the application's source code to the project's directory on the continuous integration server. The following checks out the "trunk" branch of my "tddci" Subversion repository, which I've set up for this exercise with a single project named "ant-junit":
svn checkout file:///c:/lib/svn-win32-1.4.3/repositories/tddci/trunk
CruiseControl's central config.xml configuration file specifies the details of the projects it is responsible for building. Listing One is the initial CruiseControl project definition for continuous integration of our ant-junit project.
<project name="ant-junit"> <listeners> <currentbuildstatuslistener file="logs/${project.name}/status.txt"/> </listeners> <bootstrappers> <svnbootstrapper localWorkingCopy="projects/${project.name}" /> </bootstrappers> <modificationset quietperiod="30"> <svn localWorkingCopy="projects/${project.name}"/> </modificationset> <schedule interval="60"> <ant anthome="apache-ant-1.6.5" buildfile="projects/${project.name}/build.xml" target="dist-clean" /> </schedule> <log> <merge dir="projects/${project.name}/test-results"/> </log> <publishers> <onsuccess> <artifactspublisher dest="artifacts/${project.name}" file="projects/${project.name}/dist/lib/AntJUnitExample.jar"/> </onsuccess> <htmlemail mailhost="mail.mymailserver.com" mailport="25" username="[email protected]" password="secret" returnaddress="[email protected]" defaultsuffix="@mymailserver.com" logdir="logs/${project.name}" css="c:\lib\cruisecontrol-bin-2.6\ webapps\cruisecontrol\css\cruisecontrol.css" xsldir="c:\lib\cruisecontrol-bin-2.6\ webapps\cruisecontrol\xsl" buildresultsurl="http://localhost:8080/cruisecontrol/ buildresults/${project.name}"> <map alias="steve" address="[email protected]" /> <always address="steve" /> </htmlemail> </publishers> </project>
There are several important CruiseControl components in Listing One. The svnbootstrapper bootstrapper plug-in checks for (and checks out if it exists) new code in the Subversion repository. The schedule section controls how often the source repository is checked for new code, and the Ant task to run (30 minutes is actually a more realistic interval for large projects). The publishers section controls what happens after the CruiseControl project has completed its runin this case copying the newly built JAR file to an artifacts directory if successful, and sending notifications in any case.
With this project defined, you can start CruiseControl by running its cruisecontrol.bat (or cruisecontrol.sh) file. Figure 1 shows its built-in servlet-based web interface, accessed at http://servername:8080.