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 am also finding interesting is the way in which these 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 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.
While the below is just one model and one set of tools, it should hopefully illustrate the concept.
From the top ...
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’s the IDE. They are complicated beasts and speed and responsiveness are key.
As the screenshot below shows, both of these products offer a very desktop-IDE-like experience for developing using Ruby, Node, Python and more. They incorporate the notion of a workspace for organizing 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’s surprisingly natural to get to work and producing 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.
GitHub obviously requires no introduction as a tool for source control. However, it’s worth taking a step back and reflecting on how amazing 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 visualize your revisions, your diffs, branches, and patches, the pull request workflow, integrated issue tracking, etc. It’s like a conductor for your software project.
Not too long ago this would have been an expensive enterprise purchase requiring lots 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 don’t always have the wealth of integration needed for more advanced deployment pipeline work.
After setting up an IDE and a source control repository, the next thing I’d setup on a development or deployment pipeline project would usually be a continuous integration server.
I’ve recently been checking out CircleCI who provide continuous integration service in the cloud. In literally a few clicks, you can integrate back into GitHub and have your code being built and tested by CircleCI on each commit.
Setting up and maintaining builds can be a real time-sink, requiring lots 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 CloudBees offering.
Continuous delivery often requires a number of environments to support various types of automated testing, with each one being progressively like production.
The fastest way to achieve this would be to leverage platform as a service offerings such as CloudBees, Heroku, EngineYard, NodeJitsu, etc. 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.
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.
To round out your cloud-based development pipeline, you might implement tools to support your development workflow such as a bug tacker and Wiki.
There are lots of 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’s hopefully clear that we can build a fairly advanced process for developing, building, testing and deploying code.