Testing Rails app with drone
Jul 6, 2014

Short tutorial about setting up drone to test rails 4 app running on ruby 2.1.

For us who working in payment industry, it's important to keep all source code inside company, because of PCI-DSS requirements (I almost sure about that).

For a long time we use jenkins for auto-running tests, but once I saw codeship.io, I want something same pretty at it. I am trying self-hosted version of drone.io, it's build in Go and uses Docker inside.

Currently I run it in virtual machine, with ubuntu.

I used this documentation http://drone.readthedocs.org/en/latest/install.html

$ wget http://downloads.drone.io/latest/drone.deb
$ dpkg -i drone.deb
$ drone start
# docker is running on http://localhost:80
$ apt-get install docker.io

Then it took for me a while to understand how make it build my code, so I cloned it to server and run inside app folder:

drone build .

To test .drone.yml without commit

Drone reads .drone.yml as a scenario to run tests, here's what we use:

image: bradrydzewski/ruby:2.1.1
script:
  - cp config/database.drone.yml config/database.yml
  - mkdir -p /tmp/bundler
  - sudo chown ubuntu:ubuntu /tmp/bundler
  - bundle install --path=/tmp/bundler --deployment --quiet
  - mysql -u root -h127.0.0.1 -P 3306 -e 'create database rails_app_test;'
  - mysql -u root -h127.0.0.1 -P 3306 -D rails_app_test < ./db/structure.sql
  - bundle exec rspec spec
services:
  - mysql
cache:
  - /tmp/bundler
notify:
  email:
    recipients:
      - our.team.emails@example.com

In our project use plain-sql structure.sql because some things not working well with schema.rb, and it easy to setup testing environment.

Drone use own images for docker to build, most of them are at docker repository, but new versions may be not there.

I cloned https://github.com/drone/images to server, and run:

docker build -rm -t bradrydzewski/ruby:2.1.1  builder/ruby/ruby_2.1.1/

This will build image and add it to docker's local catalogue.

This looks pretty easy for me, but I spend couple evenings to figure out. Drone don't have much information in log file before it receive any webhooks. Log file is located here /var/log/upstart/drone.log

P.S. If you want to use drone with github for bitbucket, then your drone app should have public url, I used localtunnel for that.

Happy testing.

comments powered by Disqus