If you work in or with the software industry, you've likely heard the buzz words continuous delivery, continuous deployment and continuous integration. The similarity in the terms can make understanding them rather difficult and confusing. Plus, it doesn't help that many people, even in the industry, misuse these terms. We're here to set the record straight.What is continuous delivery?
Continuous delivery refers to the process of delivering code to the customer or end user whenever the developers feel that a section of code is ready to be released rather than waiting to deliver the entire body of development work at one time. This is made possible by having automated testing programs in place. If the new release fails any of the set parameters, it is returned to the developing team for adjustment before it gets integrated with the main system.
Advantages to using continuous delivery include improved communication with the client, since he doesn't have to wait for the entire project to be completed to see if the work meets his expectations. Continuous delivery also allows small changes to be integrated into the main system as they are ready, making it easier to spot any potential issues and be able to correct them early on. Lastly, the process of continuous delivery allows for bug fixes, new products and updates to be released quickly with little risk and without a huge labor cost.
How about continuous integration?
Continuous integration refers to the process of constantly merging new development work with the main system, as often as once an hour, rather than waiting to roll out new developments all at once. This has the advantage of letting developers see how the new functions and capabilities mesh with the existing system a little at a time, minimizing the risk of a large disruption to the system. It also helps to insure that all users have access to the latest updates and bug fixes.
Using this process, tests are run on the new elements using an automated system. This allows the developers to continue working while the tests are being run. This is similar to continuous delivery. However, rather than waiting for the developers to deploy new code into the system, code that is deemed "completed" by developers is automatically released at frequent, set intervals.
And continuous deployment?
Continuous deployment makes use of automated processes to both release new code into the main environment and to test that code before it is integrated into the system. The advantages to this process are that it allows the developers to concentrate on the tasks at hand, rather than having to continually test previously-written code and keep track of potential issues in their heads. Using this process, the developer simply sends the new code through to the automated system when he or she deems it to be ready. This can be as simple as pressing a single button or entering a single keyword. With continuous deployment there is no large batch processing. Potentially, each individual element of a project can be released when it is ready using this process.
Making sense of the differences
While all of these terms are similar, there are essential differences in these three processes. For instance, continuous deployment requires both continuous delivery and continuous integration in order to work properly and avoid errors on the release. In addition, continuous deployment is dependent on having automated testing, analysis and release systems in place. While the other two processes can, at least theoretically, be done manually, continuous deployment is, by definition, automated.
All three of these processes are useful in minimizing risk and labor cost while allowing developers the greatest creative freedom. Understanding the subtle differences among the three is essential to putting to use the process that will benefit your team and your company the most.