April 20, 2013

jenkins on fedora with rails

Installing jenkins on Fedora is quite easy.

$ sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
$ sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
$ sudo yum install jenkins
$ sudo service jenkins start/stop/restart

Start jenkins by

$ sudo service jenkins start

You will get a success message.

Starting Jenkins                                           [  OK  ]

By default jenkins starts on port 8080. Visit http://localhost:8080. You will be greeted by jenkins index page.

Setting up System

Set shell for jenkins user

$ sudo usermod -s /bin/bash jenkins

Set home for jenkins user

$ sudo usermod -m /var/lib/jenkins jenkins

Now we have to perform next steps as jenkins user. You can give superuser permissions to jenkins also.

Install RVM

$ sudo su - jenkins
$ curl -L https://get.rvm.io | bash -s stable --rails --autolibs=enabled
Complete script is here

Load RVM

$ vi /var/lib/jenkins/.bashrc
$ [ -s "/var/lib/jenkins/.rvm/scripts/rvm" ] && source "/var/lib/jenkins/.rvm/scripts/rvm" # This loads RVM into a shell session.

Configuring path

Make sure that you have configured your bashrc properly so that PATH has everything that is needed to run a Rails project. I spent a lot of time with javascript runtime not found error even if i had nodejs installed. Later i realized that my bashrc was not containing path to node executable.

Gitlab hooks

I am using Gitlab as the repository server.

Create new key with ssh-keygen.

Gitlab plugin

Install

From the jenkins UI, you can install gitlab plugin. More info can be found here.

Build now hook

Add this web hook on your Gitlab project:

http://yourserver/gitlab/build_now

Now whenever there will be commit, gitlab will send a request to jenkins to trigger the build.

Build Configuration

We can run rake tasks, shell scripts once the build is triggered. This configuration can be done on the project page on jenkins server.

I prefer running a shell script which will do all the steps required to run specs. This script can be stored into version control system like git so that it will be available to everyone in your project.

I have created a sample ci script for a Rails 3.2+ project with PostgreSQL database here.

Post Build configuration

It allows to add email ids of project members who will get email after every build. It generates report for last build using various plugins.

Same steps can be used with CentOS to setup jenkins.

Happy hacking!