Crazy Ivan
Crazy Ivan (CI) is simplest possible continuous integration tool.
Usage
Create a directory where your projects will live
$ mkdir /var/continuous-integration
Place some project(s) in that directory
$ cd /var/continuous-integration
$ git clone git://github.com/edward/active_merchant.git
Set up continuous integration for each project
$ crazy_ivan setup # creates example ci scripts in
# each project (see How this works)
$ crazy_ivan setup # creates the ci directory, and
# creates a configuration file,
# sets a cron job to run crazy_ivan
Manually run it once to check everything is ok
$ cd /var/continuous-integration
$ crazy_ivan /var/www/ci # the test reports path should be
# accessible via your web server
$ open /var/www/ci/index.html # or check it through your browser
Set a cron job to run it every 15 minutes
$ echo "0,15,30,45 * * * * cd /var/continuous-integration; crazy_ivan /var/www/ci" > ci.cron
$ crontab ci.cron
Note that you don’t want this running too frequently; having overlapping
runs is possible and would be bad.
(Functionality to have this run as a web-hook is planned.)
How this works
* crazy_ivan is executed periodically by cron
* crazy_ivan looks in directories one level deeper than where it’s been called
=> asked to run in /projects
/shopify
looks in each /liquid
of these dirs /active_merchant
========> /active_shipping
=> within each directory, it expects four executable scripts
to execute at the /:
/shopify
/.ci/update
version
test
conclusion
* crazy_ivan first executes `update` and captures the output:
#!/usr/bin/env bash
git pull # Whatever your application
# needs to do to update your
# source from a repository
* crazy_ivan then exectutes `version` and captures the output:
#!/usr/bin/env bash
#!/usr/bin/env ruby -wKU # Get a version hash/fingerprint/id
puts `git show`[/^commit (.+)$/, 1] # from your version control system
#
# (Note that this will be truncated
# to fit within a filename length.)
* crazy_ivan then executes `test` and captures the output:
#!/usr/bin/env bash
rake db:migrate # This task prepares the application
rake test # for running tests, then runs them
* At each of these three steps, the output is repackaged
into a .json file to be consumed in the directory holding
the static html.
* crazy_ivan then executes `conclusion`, passing it the same results packaged
in the .json file used in the static html view.
Copyright and Credits
Copyright © 2009 Edward Ocampo-Gooding. See LICENSE for details.
Heavily inspired/first code sketch written by Tobi Lütke.