Bamboo Continuous Integration Server Adds Amazon EC2 Build Agents
Continuous Integration (CI) facilitates the daily build and test-driven development practices that support high-performance Agile teams. But CI puts significant, and variable, demand on resources. If a team's compute resources are fixed and demand for those resources increases as the team approaches a release (more tests are being introduced, more code requires build and integration) they can pay a significant penalty in terms of waiting time.
Clouds, such as Amazon's EC2 offering, provide a way to scale resources to meet that kind of variable demand. Ken Olofsen's blog post on the announcement of the version 2.2 release of Atlassian's Bamboo Continuous Integration Server notes a new feature, "Elastic Bamboo," that directly addresses this scaling issue:
... Bamboo can launch remote build agents, or elastic agents, into the cloud.
This is great for reducing build queues on those days leading up to a major milestone when everyone is checking in loads of changes all day long. Less queuing means quicker feedback, so you can get on with everything else you need to do.
An elastic agent differs from a standard remote agent only in the fact that it exists in the cloud and therefore can be intialized, used, and terminated as demand warrants. Costs for the resource are not incurred unless it is being used. Atlassian believes, although it is too early to determine exactly, that teams will realize significant cost savings using this solution.
While using Bamboo 2.2 for their in-house development, Atlassian, discovered and addressed issues likely to be encountered by their customers. One of the more interesting issues is the assumption of a robust context for the CI Server. Edwin Wong (also of Atlassian) notes:
... builds were not entirely "environment agnostic", in that they assume some setup on the environment has already happened.
The other issue is what some of our engineers on the team have dubbed the "download the entire internet" problem. ... a sizable amount of dependencies needed to be pulled down from the public repositories. Most of these dependencies are quite static. But because we blow away our instances every time, these downloads need to happen every single time an instance starts up (which can, potentially, be every build).
EC2 offers a service, Elastic Block Store (EBS), that acts as a "mountable drive" that you can attach to an instance of your cloud image. Storing all of the static dependencies as well as snapshots of the running instance, in an EBS drive allows customization of a cloud image and an easy means to snapshot that image. Wong's post includes additional details.
Atlassian is known for its support of developer communities, non-profits, and open source. They offer special licensing terms for its products as a means of showing that support.