Continuous Integration vs. Continuous Delivery vs. Continuous Deployment
DevOps has become one of the hottest trends in IT in recent years as organizations strive to optimize their development and operational processes. This in turn has given rise to a number of other buzzwords, including Continuous Integration (CI), Continuous Delivery (CD) and Continuous Deployment (CDE). Each of these are considered integral to an effective DevOps framework, but do we really know what we mean when we talk about each one?
Here we’ll look at CI, CD and CDE in more detail, highlighting some of the subtle - but important - differences between them, their key uses and the benefits they can offer. Before we do that, it’s worth stressing the common goal of all these concepts: to make software development processes more efficient, speedy and reliable.
What is Continuous Integration (CI)?
CI is a process of continuously - in practice, this typically means “several times a day” - sharing all source code changes made by individual developers into a central repository. Here these additions or updates can be built and tested for bugs, usually with tools that allow for many tasks to be automated (such as Jenkins).
The goal of CI is to solve or prevent problems that can occur when a team of developers is working on a project. Each dev or engineer can work on a different area of the project, but with CI the central repository always maintains the latest version of the source code that the whole team can access. This aims to avoid conflicts in the code, which can lead to bottlenecks and delays.
The key concept of CI is breaking down the development work into small chunks, which are then integrated into the main branch of code as they are built. This approach allows any problems to be identified and resolved quickly, preventing them from snowballing into much bigger issues further down the line. To be most effective, CI builds should be kept short, so that new code can be tested and merged quickly, with any failure notifications received within a few minutes. This improves productivity by allowing developers to draw a line under one task and move on to the next one rather than jump back and forth between tasks (context switching).
What is Continuous Delivery (CD)?
CD is an extension of CI, but it is more of a software engineering solution than one of enhancing team workflow. The overriding aim of CD is to keep the code in a deployable state at any given time. What this means in practice depends on what language, servers and frameworks are being used. But the key factor is ensuring that the features and functions that are available are vetted, tested, debugged and ready to deploy (e.g. to a staging environment) as and when they are needed. The ideal target is for this deployment to always be possible with a single click.
Again, CD makes use of automation to improve speed and efficiency in the life cycle. A full suite of automated testing can be used to ensure that once deployed the code will actually work as expected. One popular approach is using “reproducible builds,” which are builds that result in identical output artifacts. These can help developers and project managers that code that works on a developer machine will also work in a production environment. In addition, as updated code is deployed, it can be tested by users, who provide feedback that the developers can use to improve functionality or correct any ongoing issues.
As with CI, the main benefit to the IT team and business organization is speed. Automating repetitive tasks also frees up talented developers and QA engineers to work on more creative and higher-level tasks. To make your CD system effective, you should first have a robust CI model in place and ensure that everyone on the team understands and trusts the relevant processes.
What is Continuous Deployment (CDE)?
This is another extension. CDE is broadly similar to CD, but goes a step further by continuously deploying the most up to date version of your code to the production environment. The key difference here is that the whole process is automated, rather than requiring the manual intervention of a team member to complete deployment to production (as is the case typically with CD).
Setting up CDE requires a high degree of trust in the automated processes and fluid communication between all the relevant departments affected by new software releases (e.g. marketing/support) but once this is achieved it can significantly shorten the software development cycle. It can also facilitate rapid scaling of software applications.
A Quick Comparison
As we’ve seen, CD is an extension of CI and CDE is a further extension of CD. While CI focuses on helping developers by ensuring each bit of new code is bug-free and functional, CD is more about releasing updates and changes in a quick and safe manner. CDE is about creating a unified pipeline for software releases and increasing the velocity of delivery. Combining all three means that when new source code is committed it can be deployed to production automatically and within minutes (or even seconds!), assuming it passes all the relevant tests.
In this approach, software releases are smaller and far more frequent, which reduces the potential for having to roll back a major issue. The final ingredient - sometimes known as ‘continuous improvement’ - is establishing automatic feedback loops so that developers can react to information from users to keep improving the end product.
Of course, you also need to have developers that are comfortable working in a CI + CD + CDE environment. Jobsity only works with the top developers from Latin America, so don’t hesitate to get in touch to find out how we can add capacity and capabilities to your IT team.
If you want to stay up to date with all the new content we publish on our blog, share your email and hit the subscribe button.