The tuleap integrators present you here below the continuous integration infrastrucutre deployed for the Tuleap validation.
All of this begin with a new contribution made by a developper. When the contribution is ready, the developper pushes it in review through Gerrit. A trigger is defined in Tuleap's Gerrit. When a new contribution comes, Gerrit talks to Jenkins and says to it to launch all of the integration jobs.
Tuleap's Jenkins server is hosted on Rackspace. We have configured Jenkins in order to have distributed builds. This reduces considerably the time needed to run our three continuous integration jobs and increases the parallelization of our jobs. To do this technically, we use several Jenkins plugins like jCloud.
There are 3 Tuleap continous integration jobs:
- PHP 5.1 test suite,
- PHP 5.3 test suite,
- REST test suite.
The master job receives the Gerrit message. We have 3 continous integration jobs, so the master will create or reuse one agent machine per job. The master creates an agent (which means that Jenkins, with the help of jCloud, will spawn a new machine on rackspace with a functionnal Jenkins instance) if it does not exist, and reuses one if the job was previously launched in the last 30 minutes.
Each agent will return its test suite result. The master retreives all these results and generates a global result:
- Passed if all salves' status is passed,
- Fail if one of the salves' status is failed.
To finish, Jenkins will provide to Gerrit this global result:
- If it's passed, a Tuleap contributor have to validate the contribution before mergging it into Tuleap source-code,
- If it's failed, Gerrit unvalidates the contribution because this contribution brakes Tuleap. The developper has to correct it.
All of the tools used by the Tuleap continous integration process are Free and Open Source Softwares.
- FOSS: http://en.wikipedia.org/wiki/Free_and_open-source_software
- Gerrit: https://code.google.com/p/gerrit/
- Jenkins: http://jenkins-ci.org/
- Jcloud: https://wiki.jenkins-ci.org/display/JENKINS/JClouds+Plugin