- What if you could run unlimited Watir WebDriver tests in the cloud? Check.
- What if the Watir WebDriver tests would run automatically as soon as you pushed a change to github? Check.
- What if you would have a full visual history of results with embedded screenshots on failure? Check.
- What if all of this was free?* Checkmate.
I’ve spent a bit of time over the last week working out how to do this. Here are the basics of what you need to do:
- Set up an Amazon EC2 micro instance running Ubuntu. This is possible under the Amazon free tier for a year.
- Set up Jenkins CI software on this machine to automatically run tests from Github source code.
- Set up headless Watir-WebDriver tests on this machine and capture html reports and screenshots.
And here’s the detailed instructions.
Set up an Amazon EC2 micro instance running Ubuntu.
- First you need to sign up for an Amazon AWS account. This means you’re eligible for a free-tier micro instance for a year.
- Once you have an account set up, you need to launch a new instance. I found a free tier eligible Ubuntu image (11.04 Natty 64 bit desktop) and launched that.
- You will also want to create an elastic IP and associate it to your instance so that if you reboot your machine, you will have the same IP address. This is done through the AWS console under Elastic IPs.
- While you’re here, you’ll want to edit your machine’s security group and open up port 22 for SSH, and 80 for HTTP.
- This gives you secure shell (SSH) access to this machine using the provided key, and user ‘ubuntu':
ssh -i your-key-name.pem ubuntu@your-ip-address
- Everything you will do to configure this machine will be through this SSH session, so polish up your unix command line skills!
Set up Jenkins on your machine
There is a useful page for installing Jenkins on Ubuntu.
wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add - sudo sh -c 'echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list' sudo aptitude update sudo aptitude install jenkins
Make Jenkins available on port 80 so that you don’t need to specify port
Jenkins installs by default on port 80. Ubuntu won’t let applications run on port 80 unless they’re running as root, so it’s best to set up an Apache 2 proxy to port 80 to 8080.
sudo aptitude install apache2 sudo a2enmod proxy sudo a2enmod proxy_http sudo a2enmod vhost_alias sudo a2dissite default
Then create a file called
ServerAdmin webmaster@localhost ServerName ci.company.com ServerAlias ci ProxyRequests Off Order deny,allow Allow from all ProxyPreserveHost on ProxyPass / http://localhost:8080/
Then run the following commands:
sudo a2ensite jenkins sudo apache2ctl restart
Password Protect Jenkins
You should go to your Jenkins site (accessible directly at your instance’s IP address through a web browser), and create an account, and then configure the security of Jenkins.
Install Jenkins Plugins
You will need to install the following Jenkins plugins
- Github: to integrate to Github SCM
- Rake: to run ruby rake tasks that run Watir-WebDriver tests
- Green balls: because blue balls are just plain wrong
Install RVM for the Jenkins user
First we’ll need to install git
sudo apt-get install git
Jenkins will need to be able to run ruby, so we’ll install RVM as the Jenkins user.
To run as the jenkins user, we’ll use the sudo command, with the -Hiu arguments to load the home directory and bash profile:
sudo -Hiu jenkins
Once we are user Jenkins, we’ll install RVM using Git.
bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)
Now we need to work out what Ubuntu packages Ruby needs, which is easily done via RVM.
which gives me something like
For Ruby (MRI, Rubinius, & REE) you should install the following OS dependencies: /usr/bin/apt-get install build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake
So, we can log-out as the Jenkins user (control-D) and install the following as ubuntu
sudo apt-get install build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake
Once we’ve done this, we’ll want to run the following as the Jenkins user (
sudo -Hiu jenkins) to install Ruby 1.9.2.
rvm pkg install zlib rvm install 1.9.2 --with-zlib-dir=$rvm_path/usr
Running headless Watir-WebDriver tests
I choose a desktop version of Ubuntu, so it’ll already have Firefox installed, but if you don’t, you can install it by:
sudo apt-get install firefox
To run our Watir WebDriver tests headlessly using the headless gem, we’ll need xvfb
sudo apt-get install xvfb
Configuring Jenkins to run tests via Rake
You add a new build in Jenkins where you can specify the github repository location.
As we’ve installed the rake plugin, we can configure a new Jenkins project to use an RVM ruby install (in my case ruby-1.9.2-p290@watirmelon-cucumber).
I simply set up a default task in rake, which runs all my cucumber tests. This generates a results.html file which is captured as an artifact, and also creates and captures junit xml results, which are used to show test summary information.I also capture any file created under the ‘screenshots’ directory.
Summary and Outcome
I have set up both my WatirMelonCucumber and EtsyWatirWebDriver projects on jenkins.watirmelon.com.
My Jenkins Dashboard looks something like this:
Please feel to leave a comment below and let me know what you think.
* Free for one year using an free tier EC2 micro instance