Capistrano deployment with S3
larry ogrodnek - 22 Sep 2008
We recently started using Capistrano for our deployments. It's a great tool and really simplifies doing remote deployments to ec2.
A lot of our projects are java, or java web projects, so we need to deploy the result of a build, not the raw source. I really didn't want to store builds alongside the source code in subversion. Before capistrano, I had written a couple of install shell scripts that would fetch the latest project binary from S3, using bucket names structure like:
${RELEASE_BUCKET}:${PROJECT}/${VERSION}
with current always pointing to the latest version.
There is a capistrano-s3 project that checks out from your scm, creates a .tar.gz, pushes this to s3, and then pushes this to your servers.
This isn't exactly what I wanted, since it's still missing a build step. I thought I could get by with something pretty simple -- just a scm implementation backed by S3. It turns out it was pretty easy.
Here's the S3 scm implementation. You need to have s3sync installed. Drop this in
$GEMPATH/capistrano-2.0.0/lib/capistrano/recipes/deploy/scm
And you can now use the following:
set :scm, :s3
set :repository, "my-bucket:my-path"
by default it will look in my-bucket:my-path/current/, you can also set
set :branch, "1.12"
and it will look in my-bucket:my-path/1.12/
If your AWS keys aren't available in the environment for s3sync, you can also set these in your capfile:
set :access_key, "my key"
set :secret_key, "my secret"
That's basically it. I'm pretty new to both capistrano and ruby, so any comments, feedback, etc. would be appreciated.
comments powered by Disqus