You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 24 Next »

Qpid uses the Apache Infrastructure CI service, which is a HudsonJenkins installation. More details are available from the Apache wiki. Builds can run on any operating system instance available, or be locked to a particular type. It may be necessary to restrict some build types to Unix instances only, but using Hudson will give access to Solaris and Windows Server build environments which will be useful for interoperability testing. If a build tool such as Maven is used, even tighter integration with the build process is available, including better test access and the ability to use the Apache Maven repository for publishing artefacts.

Implementation

The implementation of CI for Qpid is being tracked as QPID-3149 and will be completed during the 0.11 development stream.

Operation

All builds are prefixed with qpid- to allow grouping together, the Qpid view shows all jobs matching this pattern. The proposed build entries are as follows:

  • qpid-java-build - triggered by check-ins to subversion
  • qpid-java-system-tests - nightly
  • qpid-java-network-build - nightly, from branch with network layer changes
  • qpid-cpp-build - triggered by check-ins to subversion
  • qpid-cpp-system-tests - nightly
  • qpid-python-tests - nightly, full run of python test kit
  • qpid-java-VERSION-build - triggered by check-ins to subversion, VERSION is current release branch
  • qpid-cpp-VERSION-build - triggered by check-ins to subversion, VERSION is current release branch
  • qpid-java-release - nightly or weekly, full java release with poms
  • qpid-cpp-release - nightly or weekly, full cpp release
  • qpid-interop-tests - nightly or weekly

Note that it is possible to add builds from branches, to give increased visibility to proposed changes, and greater confidence in their reliability due to increased testing.

At present, these tests run a single profile, such as default or java.0.10. As the number of profiles increases, it may be better to use the Hudson matrix project feature to paramaterise the system test build around the test profile names. Additionally, merging of the cpp and java jobs is probably desirable, as is chaining build and test jobs together.

A timeout of 60 minutes is set for all jobs.

Java Configuration

The Java builds use the latest 1.6 release of the JDK, and the latest available Ant version, which are both dependant on the versions available on the Hudson instance running the job.

Only JUnit test results are reported on currently.

The release job archives the following files:

  • **/release/*.zip
  • **/release/*.tar.gz
  • **/release/maven/**/*.*

Cpp Configuration

The following commands each build Qpid:

  • cd trunk/qpid/cpp && cmake CMakeLists.txt && make && make test
  • cd trunk/qpid/cpp && ./bootstrap && ./configure && make && make test

The C++ builds cannot use cmake currently, as it is not installed. The cmakebuilder Plugin also needs to be installed. The autoconf build also fails, due to missing header files: console output. Additional tools like swig also need to be installed, as well as the packages required for clustering.

Currently the C++ builds are disabled.

Status

The following builds are currently operational, as of 22 March 2011:

These are triggered by subversion check-ins, checked every 15 minutes.

These are run daily at 00h00.

Amazon

Due to the difficulty configuring the ASF Hudson instances to perform a C++ build, particularly if we intend to use clustering, it will be easier to use an externally hosted server. Cloudsoft have generously agreed to provide some Amazon EC2 instances and storage to run a Hudson CI server. This is currently being tested at the following URL:

This server is an EC2 c1.medium instance, running Ubuntu with an initial Hudson configuration from http://www.ciinabox.com/ and has had the following packages installed via apt-get install:

  • build-essential
  • autoconf
  • libtool
  • ruby
  • swig
  • libboost.*1.42-dev
  • uuid-dev
  • libsasl.*-dev
  • sasl2-bin
  • cmake
  • libcorosync-dev
  • libopenais-dev
  • ant
  • .*jdk.*
  • maven2
  • ln /etc/init.d/sonar /usr/bin/sonar
  • mvn clean install sonar:sonar

It is currently building the C++ code, then the Java code, running all the Java tests on the default profile, then the system tests only on the cpp profile, and generating Sonar output for metrics from the release-bin target output. We could also run some other profiles, and I have configured the build to use an external shared workspace at /home/qpid/workspace to simplify this.

Future

Hudson can be configured to provide many more features with its built-in plugins. These include:

  • FIXME/TODO task reporting
  • Javadoc publishing
  • Release artifact publishing
  • Coverage reports

The use of these plugins will be investigated once the basic build and test cycle is satisfactorily configured. Future functionality propsed includes:

  • Publishing SNAPSHOT versions of Maven artefacts to the Apache repository after a successful nightly build

Monitoring

I propose creation of a new mailing list, qpid-build@apache.org which would receive a copy of all output from every CI build. Additionally, the results of failing builds should be mailed to committers that checked in the breaking changes, and a nightly (or weekly) summary from the release and/or interop test builds should be sent to the qpid-dev list.

Currently Andrew, Rajith and Robbie have access to the build configurations.

  • No labels