Skip to content
Benjamin Wootton.Better Software
Software

Continuous Delivery Using Cloud Development Tools

6 September 2013

By Benjamin Wootton

4 min read

Cloud based online development tooling is continuing to improve, removing barriers to entry with regards to building software as part of a team.

We can now get full development environments and most of our build, test, and deployment processes up and running in the cloud using various software as a service and infrastructure as a service offerings.

These services are great in isolation, but what I also find interesting is the way in which the various components can be brought together and integrated into a completely cloud based deployment pipeline.

By combining various best of breed tools together, it should be possible to take code from an integrated development environment through build, automated testing and deployment into both QA and production environments, all without leaving your browser and without setting up any development tools or local infrastructure.

The model below is just one model and one set of tools, but it should illustrate the concept.

Development environments

The idea of a browser based integrated development environment is not an appealing prospect at first glance. If ever there was a use case for a rich client desktop application, it is the IDE. These are complicated beasts and speed and responsiveness are key.

That said, I have been blown away by how far products such as Cloud9 and Nitrous.IO have come since I checked out the early versions.

Both of these products offer a very desktop like experience for developing using Ruby, Node, Python and more. They incorporate the notion of a workspace for organising and managing your project artifacts and a fully featured Linux terminal at the bottom for interacting with your codebase. They have integrated debuggers, code navigation, macros, integrated previewing and more.

Both Cloud9 and Nitrous are extremely fast to navigate around and it is surprisingly natural to get to work and produce code within the context of your browser.

Crucially, both tools offer access to source control facilities such as Git, giving us the output into the second stage of our deployment pipeline.

Source control

GitHub obviously requires no introduction as a tool for source control. However, it is worth taking a step back and reflecting on how impressive a tool it is for managing your code artifacts and projects.

Within a browser and without hosting anything yourself, you are given source control, the ability to manage and visualise your revisions, your diffs, branches and patches, the pull request workflow and integrated issue tracking. It is like a conductor for your software project.

Not too long ago this would have been an expensive enterprise purchase requiring a great deal of system administration, and the quality would have been far behind what GitHub gives you for a few dollars per month.

Competitors such as Bitbucket and Beanstalk are definitely worthy competitors for online source control, though they do not always have the wealth of integration needed for more advanced deployment pipeline work.

Continuous integration

After setting up an IDE and a source control repository, the next thing I would usually set up on a development or deployment pipeline project is a continuous integration server.

I have recently been checking out CircleCI, which provides a continuous integration service in the cloud. In a few clicks you can integrate back into GitHub and have your code built and tested by CircleCI on each commit.

Setting up and maintaining builds can be a real time sink, requiring a lot of configuration and resources to keep your builds stable and fast. CircleCI removes many of the concerns here, even supplying you with various databases to support your continuous integration and testing.

A strong alternative to CircleCI in the Java space is the CloudBees offering.

Environments

Continuous delivery often requires a number of environments to support various types of automated testing, with each one being progressively more like production.

The fastest way to achieve this is to leverage platform as a service offerings such as CloudBees, Heroku, Engine Yard and NodeJitsu to manage your environments without any infrastructure on your part.

CircleCI is useful as it can be used to deploy artifacts directly to these environments, both for testing purposes and later for the production deployment.

Cloud based testing

Various cloud tools are emerging that support automated acceptance testing.

I like the Sauce Labs offering, giving you the ability to complete manual and automated testing across a range of platforms and mobile devices.

This testing can be carried out against the software that has been deployed into your test environments out of CircleCI. When you are happy with a particular set of tests, you can then deploy to the next environment in the pipeline.

Development administration

To round out your cloud based development pipeline, you might implement tools to support your development workflow such as a bug tracker and a wiki.

There are many examples that could be used here, but lightweight tools such as Trello and Asana, or slightly more enterprise offerings such as hosted Jira and Confluence, can all be procured completely online as software as a service. Even a few years ago, tools of this quality would have been significant investments requiring your own server resources and a degree of administration.

By combining the above tools, it is hopefully clear that we can build a fairly advanced process for developing, building, testing and deploying code.

For more on the delivery side of this, see my notes on continuous delivery and doing rollback well. The CI tools note is a good companion if you are choosing a first build server.

Reference shelf

Sources and further reading for this note.