DevOps has generated an entirely new language of terms used to describe specific ideas, processes and situations. These terms can be confusing, particularly when they are as similar as ‘continuous integration’ and ‘continuous delivery.’ So, what’s the difference between the two, and how do you leverage each to achieve your overall business goals?
What is Continuous Integration?
Continuous integration (CI) is the frequent updating of code to a shared source control tool (such as Git, SVN, TFS) and automated build and testing in a lower environment. This allows many different individuals or teams to work on a project simultaneously, ultimately speeding up processes and timelines. As long as the code is updated and centralized frequently, disparate teams have access to the most updated version of code, helping to eliminate conflicts and duplication of efforts.
The focus of continuous integration is development and testing. Frequent updates and synchronizations allow for automated build processes and testing to be triggered. Limiting the number of manual touches, continuous integration helps to speed the cycle, and mitigate the risk involved with less-frequent integration testing of the code.
What is Continuous Delivery?
While continuous integration focuses on the build cycle of software development, continuous delivery (CD) is all about delivering new capabilities or enhancements to the end user as quickly as possible. As new features and fixes are uploaded to the source control tool for CI, CD makes sure that they pass through downstream testing and quality assurance (QA) environments as quickly as possible, speeding the cycle further and allowing for faster Mean Time to Resolution (MTTR) of issues and faster delivery into a live environment.
Automation plays an enormous role in achieving continuous delivery. Automating testing and other quality checks act to ensure that bugs are identified and corrected before updates are deployed. These tests may include load tests related to APIs, UI, security, user experience, or integration testing, to name a few. Whatever is required to ensure the updates provide the features promised, and that there are no surprises to disrupt the user experience upon release.
What are the benefits of Continuous Integration & Continuous Delivery?
1. Smaller code changes.
With CI, small changes are delivered frequently, and each piece is subjected to testing in a lower environment. With large-scale, less frequent changes, it can be difficult to test for every use case or interaction with other applications. There is a greater risk that some unforeseen circumstance will create problems in the final release. Continuous integration helps to eliminate this issue.
2. Fault isolation.
Because small changes are tested independently of one another as they are created, any errors that result will likely be minimal, and much easier to trace to the source. Identifying and addressing issues faster reduces the MTTR, a metric that measures how well the process is performing.
3. End the IT backlog.
Trying to design, develop, and manage a large-scale revision and re-release of software takes time, delaying the delivery of requested fixes or features to the end user. Further, the time devoted to this project delays other technology improvements and updates, adding more to the IT backlog. Small sprints of effort, on the other hand, allow many different applications, issues, features and fixes to be addressed concurrently, eliminating the IT backlog of projects and tasks that could help drive revenue.
4. Streamline with automation.
CI/CD relies heavily on automating repetitive processes, which has numerous benefits to the technology team. First, it streamlines processes and eliminates duplication of effort and wasted time. Second, it frees valuable human resources to focus on higher-level, strategic objectives, benefitting both the employees and the organization. Third, it eliminates costly human error, improving outcomes and reducing the need for correction after deployment.
What about Continuous Deployment?
Not to complicate matters further, but there is another CD in DevOps – Continuous Deployment. This refers to the process of regular, automated releases of updated software to the production environment with minimal or zero human intervention required. How does this fit into the DevOps concept?
Continuous delivery may automate the process from development through testing, but still includes a manual review stage before software is deployed to production. Continuous deployment automates this review and release: if software changes pass the testing phase, it is automatically and continuously deployed to the end user. Generally, continuous deployment systems include a robust system of monitoring and alerts, so that if rolling deployments release something problematic into production the team can be alerted and initiate a rollback in a timely manner.
To realize the benefits of DevOps and continue along the path from new adopter to maturity, it is important to understand all the different moving parts that make DevOps possible. These include concepts, like CI/CD, as well as other agile processes and the tools to support them.