The cloud and continuous integration (CI) are a natural match. While the cloud frees us from the pain of installing and maintaining physical servers, continuous integration automates away much of the pain of building, testing, and deploying our code. If both aim to take work off the shoulders of development teams, it only makes sense to combine them and eliminate even more drudgery with one step.
There are many continuous integration services and they all do much the same thing, at least in an abstract sense. They begin with a list of the tasks like compiling or testing that must be accomplished before the world can appreciate the genius in your new software. When you commit your lines of code, the tools start working through the checklist until they run into a roadblock. If there are no roadblocks, everyone is happy.
Anyone can use continuous integration for any software development project, but the biggest advantages are enjoyed by teams, preferably large teams that are working on the same, interlocking blocks of code. The most thorough implementations of continuous integration build and rebuild the code before testing and retesting it, all in search of new errors and incompatibilities that may have been created as different team members check in their code. Continuous integration servers synchronize the work of all of the programmers and help the team detect any problems.
Some lists of tasks for the CI server end with the tests, but lately more and more teams are extending the lists to include deployment of the new code, a process sometimes dubbed “continuous deployment.” Completely automated deployment makes some people nervous and they will often add some manual pauses in the process. Adding a bit of accountability and human assurance lets them relax a bit. They’ll call this hybrid approach “continuous delivery” because it delivers the code to some staging or testing cluster where it will wait for a human to make the final push to production.
If continuous integration is great in the server room down the hall, it can be even better in the cloud where there are great opportunities for faster delivery and greater efficiency. In the best cases, the clouds can split up the work and run the tasks in parallel. The services start with a large pool of hardware and then share it among many teams. As long as everyone isn’t pushing their code at the same time, the builds and tests will run much faster. Purchasing the same huge rack of hardware for just the moments when the developers want to run all of the tests is prohibitive, but if the teams share the rack they can all enjoy the bursts of speed.