DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
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 - nightly, VERSION is current release branch
- qpid-cpp-VERSION-build - nightly, VERSION is current release branch
- qpid-release-build - nightly or weekly, full release
- qpid-interop-tests - nightly or weekly
The initial testing of the CI configuration is being carried out using the qpid-java-build job only, until any issues are sorted out.
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.
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.
Future
Hudson can be configured to provide many more features with its built-in plugins. These include:
- JUnit test 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
Issues
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.
JMX based tests are failing:
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.
Currently Andrew, Rajith and Robbie have access to the build configurations.