drnic / railsapp-vagrant

Sample Rails3 project with Vagrantfile + cookbooks

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Sample Rails3, Vagrantfile and testing within Hudson CI

This README describes how to start up a Hudson CI server, create a VM and add it to Hudson CI server as a slave, and create/build a job to run this project's tests.

This app has a Vagrantfile and Chef recipes to create a VirtualBox VM ready for integration testing.

It includes a Java JRE so that Hudson CI can use the VM as a slave node, SSH into it, inject its slave.jar and automated it.

Preparation

For the tutorial on running CI tests through Hudson CI with VM instances constructed by Vagrant, there are a couple preparation steps:

git clone git://github.com/drnic/railsapp-vagrant.git
cd railsapp-vagrant

Next, install VirtualBox.

Vagrant

Install Vagrant and download the Ubuntu Lucid 32bit VirtualBox image:

gem install vagrant -v 0.6.7 # if other version, the replace '0.6.7' in instructions below
vagrant box add base http://files.vagrantup.com/lucid32.box

Then to spin up a VM for this Rails app (takes 10 minutes, mostly due to installing Java JRE, I think):

vagrant init base
vagrant up

To access this project within the VM:

vagrant ssh
$ cd /vagrant/
$ rake test
/vagrant/db/schema.rb doesn't exist yet.

Quick fix of VM

When I do this the ~/.gem folder is owned by root and not the vagrant user. This isn't correct. Fix it within the VM:

$ sudo chown vagrant:vagrant ~/.gem
$ exit

Testing within Hudson CI

You can add this VM into Hudson CI as a slave, create a Hudson job for this project, and restrict it to running the tests only within this VM. This will ensure that you have all the system/utility/ruby requirements for your tests. Ideally, these will match your production deployment environment.

To experiment with Hudson CI:

gem install hudson
hudson server

This spins up Hudson CI at http://localhost:3010.

In another terminal, add the VM as a slave node:

$ hudson add_node localhost --name "VM" \
    --label railsapp-vagrant \
    --slave-port 2222 \
    --slave-user vagrant \
    --slave-fs /vagrant/tmp/hudson-slave \
    --master-key /Library/Ruby/Gems/1.8/gems/vagrant-0.6.7/keys/vagrant \
    --host localhost --port 3010

$ hudson nodes --host localhost --port 3001
master
VM

Visit your Hudson CI to see the Slave node registered as "VM" on the left hand side.

To add this Rails3 application as a CI job in Hudson:

hudson create . --template rails3 --assigned-node railsapp-vagrant

Note: the --host and --port flags are only required when you want the hudson CLI to change/set which Hudson CI master it is communicating with. Well, that's how the CLI works at the time of writing.

Visit your Hudson CI and see a new job in the list and it should start building automatically. Click through and find the Output Log to see the build in progress. It should end up with SUCCESS!

About

Sample Rails3 project with Vagrantfile + cookbooks


Languages

Language:Ruby 90.5%Language:JavaScript 9.5%