Amazon EC2 and Continuous Deployment using Bamboo

So you want to start integrating your shizzle on a continuous basis? Bamboo is great tool for that - especially if you use any other Atlassian toolset such as Jira and BitBucket.

You can download and install a bamboo server locally, or another option is to run it on the cloud using an "Elastic Instance". At my last place we used Bamboo for Continuous Deployment - generating content json files on an hourly basis.

Continuous Integration and Deployment

CI

CI is a development practice where developers integrate code into a shared repository at least once per day, usually several.

CD

A great reason for CD is that the deployment process is automated and triggered automatically, usually by a commit to git. Long gone are the days where a guy with a beaded brow is sitting over an FTP application and fingers quiverring whilst staring at a server terminal window.

A great resource on this is on the thoughtworks website.

Definitions

When first looking into Amazon EC2 I was immediately smacked in the face by a lot of nomenclature. Spinny head and sore eyes ensued, followed by lols when realinsing exactly what these terms meant. I think it is better to cover some defintions to get a general understanding of what is what:

Amazon definitions

Amazon S3
A big storage space on the Amazon cloud
EC2
Elastic Cloud Computing: Lots of Virtual Machines on the cloud. E plus C times 2, get it? Like W3
EBS
Elastic Block Store: Disk drives/space on the cloud
AMI
Amazon Machine Image: A predefined virtual machine type, like a windows or linux one
VPC
Amazon Virtual Private Cloud: A virtual network; a network of machines but in the cloud
IAM
Identity and Access Management: Security stuff like key value pairs, pem certificates etc

Bamboo definitions

Elastic Bamboo Image
A predefined server (AMI instance) setup by Bamboo to have everything you need for Bamboo when you instantiate it
Elastic Bamboo Instance
You have created an instance of the Elastic Bamboo Image
Elastic Agent
A service running on an Elasting Bamboo Instance that runs your job builds. Basically the bamboo server running on an instance

Overview

Diagram of Bamboo on EC2

Bamboo

The above definitions aren't too bad really, but when the documentation throws these TLAs around, it's best to know whats going on.

Setting up the Elastic Instance is pretty straight forward, but at the time there was a big caveat. If you're using a region other than US East (you can check that in the elastic bamboo configuration), there will be no stock AMIs available for you, you're dealing with a custom AMI and that will need a lot of configuration. Stock AMIs will be available in all regions within a couple of weeks (from January 2015).

Once Bamboo is set up and we have an Elastic Instance then we can add a build. More details on the Atlassian website.

The Bamboo process is built using Plans, which execute stages (sequentially), stages run Jobs (in parallel), and Jobs run Tasks (sequentially).

I've created a Bamboo mind map detailing the common build processes and the Bamboo build process itself:
Bamboo mind map

It's best to go through some tutorials at Atlassian.

Resources