Capistrano deploy from any branch
When using capistrano for rails deployment you typically end up with a configuration file per
environement in the config/deploy
folder. In this file you state what branch you want to deploy from:
set :branch, 'staging'
This may be a good thing if you always want to deploy from a certain branch to a certain environment. At my current gig
we always deploy to production from a production
branch. Another common approach is to keep master
in sync with
the production environment. However for test environemnts it may be convenient to be able to deploy from any branch.
Luckily config files in Ruby are often written in Ruby (not in XML or something similar unprogammable). So making this
little thing happen is as easy as:
set :branch, `git symbolic-ref -q HEAD`.split('/').last.strip
and the current branch will be used when running the deploy. One may think that git branch
should have an option for
just getting the current branch and nothing else but no luck there….. The symbolic-ref
command give us the full name
of the branch. E.g. refs/heads/development
so we need to the stripping part ourselves.
The way capistrano is normally setup it is possible to deploy the production branch from another branch. This makes it impossible to keep track of what deploy configuration that actually was used for a certain deploy. Dangerous stuff indeed.