How to create a continuous integration pipe for any maven+git application ?
My last goal was to create and install a full working pipe of Continue Integration for my Java « mavenized » and « gitified » projects.
Using our good old pals Jenkins and Sonar, with my older pal ubuntu in a VM, we were able to create a « Ready to use Integration machine ».
So… action !
First Step : VM and Ubuntu
1. Get VirtualBox
sudo apt-get install virtualbox
2. Download ISO image of Ubuntu Server
download the 32bits ISO image from http://www.ubuntu.com/download/server
3. Create a new VM to install the downloaded ISO
set 1GBytes of memory, to start a small project this must met just right.
create a new user with jenkins/jenkins as user/password with an administrator profile.
Second Step : Java plateform
Login to your brand new virtual server and follow the next lines.
1. Install Java 6
sudo apt-get install openjdk-6-jdk
Verify good installation with the followinf command line
mcg/linux$ java -version
You must get the log bellow :
java version "1.6.0_24" OpenJDK Runtime Environment (IcedTea6 1.11.4) (6b24-1.11.4-1ubuntu0.12.04.1) OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
2. download Maven 3.0.4 from http://maven.apache.org/download.html and unzip it in the /opt/tools/java/tools/maven/3.0.4 path
Set full access to folde :
chown 777 +R /opt/tools/java/tools/maven/
add maven to yout system path:
export M2_HOME=/opt/tools/java/tools/maven/3.0.4/ export PATH = $PATH;$M2_HOME;.
the verify installation with a :
You must obtain :
Apache Maven 3.0.4 (r1232337; 2012-01-17 09:44:56+0100) Maven home: /opt/tools/java/tools/maven Java version: 1.6.0_24, vendor: Sun Microsystems Inc. Java home: /usr/lib/jvm/java-6-openjdk-amd64/jre Default locale: fr_FR, platform encoding: UTF-8 OS name: "linux", version: "3.2.0-31-generic", arch: "amd64", family: "unix"
Third Step : Jenkins and Sonar
1. Add the APT repository from http://pkg.jenkins-ci.org/debian/
wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
Add the following line to /etc/apt/sources.list
deb http://pkg.jenkins-ci.org/debian binary/
and the execute the following lines into a terminal:
sudo apt-get update sudo apt-get install jenkins
verify installation with your favorite browser and open the url http://localhost:8080/
2. Download Sonar from http://www.sonarsource.org/downloads/, get the last ZIP version (here is the 3.2.1)
unzip it into /opt/tools/sonar/3.2.1/, then change rights on the folder:
chown 777 +R /opt/tools/sonar/3.2.1/
and start Sonar with a
Verify Sonar web access crowling the http://localhost:9000/ url.
Fourth Step: configuration
OK, then configure Jenkins to accept JDK, Maven and Sonar with the right bundle of plugins; choose the following list of plugins:
- git plugin, don’t forget to set the git command path to /usr/bin/git
- sonar plugin, set the sonart path to /opt/tools/sonar/3.2.1
- set the maven path to /opt/tools/java/tools/maven/3.0.4
Optionaly you can add :
- github plugin to connect github to one of your projects
- gith OAuth security login (optional) to authenticate your Continuous Integration Server users with Github users.
Start : Create a Job !
1. Named your project
2. Select your maven version (the just installed 3.0.4 version)
3. Set the git repository (e.g. http://bitbucket.org/McGivrer/easywebapp.git 🙂
4. Activate Sonar in the optional post-build actions (just add Sonar as post action)
go back to the Jenkins home page and then press the magic Build button !
Ready to read build state and tests results ?
figure 1 – Jenkins displaying build results
figure 2 – Sonar displaying project analyses with the « Time Machine » view
Very usefull tricks
To perform good build and better results, it’s better to add some additional plugins to Jenkins.
Here is the list of Beautiful things:
- OpenId is an authentication plugin to perform user authentication with an OpenID system. Easily you will be able to connect to Google Account with the specific openId option in the Jenkins administration/configuration panel, using the specific url like
- GoogleCalendarPlugin will publish build results to a specific Google Calendar. Very useful to analyze build stability over the time. Configuration is really simple, just create a Google Calendar or get your already existing one, and from Parameters/general setting, get the XML private url and past it onto your Job configuration. Set authentication stuff and activate « All builds » options, that’s it !
Have fun !