Joe is a Continuous Integration server that'll run your tests on demand and report their pass/fail status.
Because knowing is half the battle.
$ rip install git://github.com/defunkt/cijoe.git $ git clone git://github.com/you/yourrepo.git $ cijoe yourrepo
$ gem install cijoe $ git clone git://github.com/you/yourrepo.git $ cijoe yourrepo
Boom. Navigate to http://localhost:4567 to see Joe in action.
cijoe -h for other options.
Basically you need to run
cijoe and hand it the path to a git
repo. Make sure this isn't a shared repo: Joe needs to own it.
Joe looks for various git config settings in the repo you hand it. For
instance, you can tell Joe what command to run by setting
$ git config --add cijoe.runner "rake -s test:units"
Joe doesn't care about Ruby, Python, or whatever. As long as the runner returns a non-zero exit status on fail and a zero on success, everyone is happy.
Need to do some massaging of your repo before the tests run, like
maybe swapping in a new database.yml? No problem - Joe will try to
.git/hooks/after-reset if it exists before each build phase.
Do it in there. Just make sure it's executable.
Want to notify IRC or email on test pass or failure? Joe will run
.git/hooks/build-worked if they exist
and are executable on build pass / fail. They're just shell scripts -
put whatever you want in there.
Tip: your repo's
HEAD will point to the commit used to run the
build. Pull any metadata you want out of that scro.
Want joe to run against a branch other than
master? No problem:
$ git config --add cijoe.branch deploy
Campfire notification is included, because it's what we use. Want Joe
notify your Campfire? Put this in your repo's
[campfire] user = email@example.com pass = passw0rd subdomain = whatever room = Awesomeness ssl = false
Or do it the old fashion way:
$ cd yourrepo $ git config --add campfire.user firstname.lastname@example.org $ git config --add campfire.subdomain github etc.
Want CI for multiple projects? Just start multiple instances of Joe!
He can run on any port - try
cijoe -h for more options.
Thanks to Dean Strelau you can also run multiple instances of CI Joe using
In particular, it is possible to mount Server at a subpath:
map '/foo' do run CIJoe::Server.set(:project_path => 'projects/foo') end
and you can even run multiple instances of Joe if you subclass:
map '/foo' do run Class.new(CIJoe::Server).set(:project_path => 'projects/foo') end map '/bar' do run Class.new(CIJoe::Server).set(:project_path => 'projects/bar') end
Worried about people triggering your builds? Setup HTTP auth:
$ git config --add cijoe.user chris $ git config --add cijoe.pass secret
Any POST to Joe will trigger a build. If you are hiding Joe behind HTTP auth, that's okay - GitHub knows how to authenticate properly.
You can find the Post-Receive option under the 'Service Hooks' subtab of your project's "Admin" tab.
Want to run Joe as a daemon? Use
$ nohup cijoe -p 4444 repo &
Other CI Servers
Need more features? More notifiers? Check out one of these bad boys:
( Chris Wanstrath :: email@example.com )