Continuous Integration Vs Continuous Delivery Vs Continuous Deployment
by Ajay Tiwari
Continuity is the cornerstone of every DevOps strategy. DevOps calls for process continuity in the form of Continuous Integration, Continuous Delivery and Continuous Deployment. Let’s look at each of these in greater detail along with the benefits of implementing them in the software development lifecycle.
Continuous Integration (CI) involves building and unit-testing the code changes immediately after the developer checks it in, thus enabling the newly incorporated changes to be continually tested. The main idea behind this practice is to test the code frequently as the development process proceeds, so that possible issues are identified and rectified early.
In CI, the majority of the work is performed by automated tests. It makes use of a unit test framework along with a build server, which performs the actual tests. This allows the DevOps consultants to carry on with the development work while simultaneously testing the code. Since CI involves reception of constant feedback on the software status, the arising code issues are typically less severe in their complexity and are much easier to resolve.
Continuous delivery is an extension of CI. In this process, developed code is continuously delivered as soon as the developer deems it ready for being shipped. It involves continuous integration, testing automation and deployment automation processes, which enable rapid and reliable development and delivery of software with the least manual overhead. The core idea is to deliver the code to QA, customers, or any user base so that it can be constantly and regularly reviewed.
While CI takes care of the build/test part, CD allows testing of the business logic. Unit tests typically are unable to narrow down onto business logic problems, especially the design issues. In Continuous Delivery, small sets of the developed work are continually supplied for user acceptance testing (UAT) or to the staging environment for review or evaluation. This enables business issues to be found early in the development cycle, ensuring that fixing takes place before moving ahead to other aspects of the project. Thus, CD lets developers work on providing frequent releases which can be taken ahead with greater predictability and reliability.
Continuous Deployment (CD) is the next logical step after continuous delivery. It is the process of deploying the code directly to the production stage as soon as it is developed. In CD, all the changes that pass the automated tests are automatically deployed to the production stage.
Though continuous deployment should ideally be the goal for every organization, it is impractical if the IT process includes waiting before making a feature live. Successful implementation of CD requires automation of Continuous Integration Build Server as well as the automation of Continuous Delivery to Staging. Finally, it also requires the ability for automatic deployment to production.
While it is true that adding Continuous Integration, Continuous Delivery or Continuous Deployment to IT processes add overheads to projects, they provide some important benefits that make them invaluable. Typically, these processes improve collaboration among developers and reduces the time spent on the synchronization of database and environment. Further, they reduce the complexity of testing and deployment and do away with most of the surprise issues and fixes that tend to crop up at the last minute.