Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Jenkins

Qpid uses the Apache Infrastructure CI service, which is a Hudson Jenkins 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 Jenkins 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 qpidQpid- 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.

...

following builds are configured:

Build

Trigger

Description

Qpid-Java-Java-MMS-TestMatrix

check-in

Tests the Java client with Java broker using the Memory message store.
Matrix project permutating AMQP 0-10/0-9-1 protocols.

Qpid-Java-Java-BDB-TestMatrix

after MMS matrix pass

Tests the Java client with Java broker using BDB message store.
Matrix project permutating AMQP 0-10/0-9-1 protocols.

Qpid-Java-Java-DBY-TestMatrix

every 24h

Tests the Java client with Java broker using Derby message store.
Matrix project permutating AMQP 0-10/0-9-1 protocols.

Qpid-Java-Cpp-Test

check-in

Tests the Java client with the C++ Broker.

Qpid-Java-Java-Test-IBMJDK1.6

every 24h

Tests the Java client with Java broker under IBM JDK 1.6. AMQP 0-10 only.

Qpid-Java-Java-Test-JDK1.7

every 24h

Tests the Java client with Java broker under Sun JDK 1.7. AMQP 0-10 only.

Qpid-Python-Java-Test

every 24h

Tests the Python client with the Java Broker against AMQP 0-8. 0-9. and 0-10 protocols..

Qpid-Python-Cpp-Test

every 24h

Tests the Python client with the C++ Broker.

Qpid-Java-Java-Test-0.16

every 24h

0.16 Release branch test. Tests the Java client with Java broker. AMQP 0-10 only.

Qpid-Java-Artefact-Release

every 24h

Generates binary release archives and Maven artefacts for the Java Client/Broker.

Qpid-proton-c

check-in

Performs proton-c build (cmake/make) and executes the Python system test suite

Qpid-proton-j

check-in

Performs proton-j build (maven) and executes the Python/Java system test suite

Qpid-proton-jni

check-in

Performs proton-c build (cmake/make) and executes the Python/Java system test suite via the Java (JNI Bindings)

Qpid-proton-j-deploy

every 24h

Deploys proton-j snapshots artefacts to

https://repository.apache.org/content/repositories/snapshots/

 

A timeout of 60 minutes is set for all jobs.

Job Configuration Notes

Qpid Java Build/Release Configuration

The Java builds use the latest 1.6 release of the JDK, and the latest available Ant version, which are both dependant dependent on the versions available on the Hudson Jenkins 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//.*

Qpid Cpp Build Configuration

The C++ builds will use cmake.

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.

Future

following commands are used to perform the Cpp build.

Code Block
cd trunk/qpid/cpp

./bootstrap; ./configure CXXFLAGS="-Wno-unused-result";make clean;make -j4

(As of February 2013, the packages dependencies for Ubuntu 12.04 were: automake, g+, libboost, libboost1.46-dev, libboost-filesystem-dev, libboost-program-options-dev, libicu48, libstdc+6-4.4-dev, libtool, pkg-config, python2.7-dev , python-dev , ruby, sasl2-bin, subversion, uuid-dev, cmake, swig).

Qpid Python Test Configuration

The following commands are used to run the Python tests:

Code Block
cd trunk/qpid/python
ulimit -n 1024 # Workaround QPID-3237 - reduce open filehandles
ant -file qpid-python-test-ant.xml -Dqpid.executable=../java/build/bin/qpid-server -Dpython.test.ignore=-I../java/test-profiles/python_tests/Java010PythonExcludes "-Dpython.test.modules=-mqpid_tests.broker_0_10 -m qmf.console" -Dqpid.port=25672 -Dqpid.executable.args="-p 25672 -m 25000" test

Proton-C

The build of proton-c required the addition of Ubuntu packages cmake, swig.

Future

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

  • FIXME/TODO task reporting
  • Javadoc publishingRelease 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 proposed includes:

  • Switch CPP Build to use cmake
  • Integrate Windows build for Java and CPP Brokers
  • Publishing SNAPSHOT versions of Maven artefacts to the Apache repository after a successful nightly build

Issues

The initial testing of the CI configuration is being carried out using the qpid-java-build job only, until any issues are sorted out.

Currently, there seems to be a problem with the exclusion of various tests. For example, AcknowledgeAfterFailoverOnMessageTest should not be running under the default test profile.

This appears to be caused by spaces in the job name. A copy of the original job named qpid-java-build works as expected.

All JMX based tests are failing on Solaris instances. The operational profiles have been locked to Ubuntu Hudson instances to try and fix this.

No Format

java.rmi.server.ExportException: internal error: ObjID already in use
	at sun.rmi.transport.ObjectTable.putTarget(ObjectTable.java:169)
	at sun.rmi.transport.Transport.exportObject(Transport.java:74)
	at sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:229)
	at sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:393)
	at sun.rmi.transport.LiveRef.exportObject(LiveRef.java:129)
	at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:190)
	at sun.rmi.registry.RegistryImpl.setup(RegistryImpl.java:92)
	at sun.rmi.registry.RegistryImpl.<init>(RegistryImpl.java:68)
	at java.rmi.registry.LocateRegistry.createRegistry(LocateRegistry.java:222)
	at org.apache.qpid.server.management.JMXManagedObjectRegistry.start(JMXManagedObjectRegistry.java:218)
	at org.apache.qpid.server.registry.ApplicationRegistry.initialise(ApplicationRegistry.java:294)
	at org.apache.qpid.server.registry.ApplicationRegistry.initialise(ApplicationRegistry.java:154)
	at org.apache.qpid.test.utils.QpidBrokerTestCase.startBroker(QpidBrokerTestCase.java:472)
	at org.apache.qpid.test.utils.QpidBrokerTestCase.startBroker(QpidBrokerTestCase.java:403)
	at org.apache.qpid.test.utils.QpidBrokerTestCase.setUp(QpidBrokerTestCase.java:301)
	at org.apache.qpid.server.security.acl.AbstractACLTestCase.setUp(AbstractACLTestCase.java:120)
	at org.apache.qpid.server.security.acl.ExternalACLJMXTest.setUp(ExternalACLJMXTest.java:57)
	at org.apache.qpid.test.utils.QpidBrokerTestCase.runBare(QpidBrokerTestCase.java:234)
	at org.apache.qpid.test.utils.QpidTestCase.run(QpidTestCase.java:120)

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.

Notifications

All jobs are configured to send email to notifications@qpid.apache.org when a build fails, becomes unstable or returns to stable.

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

Sonar

quid-java-build (the Qpid Broker for Java and the AMQP 0-8..0-10 JMS Client) are set up in Sonar:

https://analysis.apache.org/dashboard/index?id=org.apache.qpid%3Aqpid-java-build Currently Andrew, Rajith and Robbie have access to the build configurations.