OctopusCI is fresh new take on a continuous integration server centralized around the concept of getting the same great CI benefits when using a multi-branch workflow.
How's it Different?
The impetus that brought OctopusCI into being was simply the lack of CI servers that cleanly supported a software development workflow based on multiple branches. Secondarily, it was the excessive amount of effort necessary to get a basic CI server up and running.
Octopsuci fills this gap by providing intelligent multi-branch queueing and multi-server job distribution. Beyond that it provides a solid continous integration server that is trivial to get setup and running. A number of the concepts used in OctopusCI are pulled from Continuous Delivery, Continuous Integration as well as Scott Chacon's post on the GitHub Flow.
The following is a listing of a number of some of its more significant features.
Dynamic Multi-Branch Triggering
OctopusCI detects branch creation/modification and dynamically generates a build for that branch based on the project the pushed branch belongs to. Most existing CI servers that I have used force you to manually define jobs for each branch you would like it to manage.
Multi-Server Job Distribution
OctopusCI allows you to configure it to run "remote jobs" on numerous servers and it keeps track of which servers are currently busy as well as handing new jobs to the correct servers as they become available. This is extremely valuable if you are interested in running automated acceptance tests that take a long time to run such as Selenium/Cucumber & Capybara Tests.
Intelligent Multi-Branch Queueing
OctopusCI intelligently manages its job queue by by simply updating any pending jobs with the newly pushed branch data. This means that at any given point in time there is only ever one pending job for each branch. When, a code push comes into OctopusCI it first looks to see if there is already a pending job for the branch that was pushed. If there is, it simply updates the jobs associated branch data. If there is not already a pending job then it queues a new job for that branch.
OctopusCI was designed specifically to integrate cleanly with GitHub's push notifications system. At some point in the future OctopusCI may support more than just GitHub but for the time being GitHub is our primary focus.
On Debian/Ubuntu machines this is to my knowledge as easy as
apt-get install redis-server.
On Mac OS X machines this can easly be installed via brew
brew install redis. Follow the on screen instructions to configure it to auto
startup when you boot up as well as simply how to run the server manually.
Gem & Init Skel
$ gem install octopusci $ sudo octopusci-skel
octopusci-skel command will make sure the
/etc/octopusci path exists and its
underlying structure. It will also create a default example
if one is not found.
Update Example Config
Now that the
/etc/octopusci/config.yml example config has been created for you it is
time to go check it out and update some of the values in it.
TODO: Fill this out with details on the config, required fields, optional fields, etc.
Add any jobs you would like to the
/etc/octopusci/jobs directory as .rb files
and OctopusCI will load them appropriately when started.
Figure out what directory the gem is installed in by running the following
command and stripping off the
lib/octopusci.rb at the end.
gem which octopusci
Once you have the path we can use that path to setup Passenger with Apache or something else like nginx.
Apache virtual host example
<VirtualHost *:80> ServerName octopusci.example.com PassengerAppRoot /path/of/octpusci/we/got/before DocumentRoot /path/of/octpusci/we/got/before/lib/octopusci/server/public <Directory /path/of/octpusci/we/got/before/lib/octopusci/server/public> Order allow,deny Allow from all AllowOverride all Options -MultiViews </Directory> </VirtualHost>
The above will give us the web OctopusCI web interface.
If you are developing you can simply start this up by running
rackup -p whatever_port while inside the octopusci directory where the
config.ru file exists.
I recommend you setup the second half of OctopusCI (
God or some other monitoring system. However, for development you can simply
octopusci-tentacles directoly as follows:
We currently have a persistent IRC channel named
#octopusci setup on
I try to be in this room all the time to help people out, answer questions, and help contributors out.
If you are interested in developing OctopusCI then please checkout the Developer Setup wiki page.