Sample Rails3 project with Vagrantfile + cookbooks
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.
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.
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.
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
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
!
Vagrant is a tool for building and distributing development environments.
A Vagrant provider plugin that manages DigitalOcean droplets.