Ever since Patrick Debois coined the term DevOps in 2009, it has become a buzzword when talking about software production. The DevOps methodology has slowly taken over the workflow of most programmers, thereby marking a new era of continuous software product releases. As the team behind DeployPlace, we often interact with hundreds of developers and tech enthusiasts to gain expert perspectives on DevOps concepts. When asking development pros to weigh in on this concept, and share their views, we realised one thing – people often confuse CI/CD and DevOps.
We also researched online and found Devops and CI/CD as subjects of particularly high interest among developers. On Quora, for instance, there are multiple threads on DevOps and CI/CD. Heading over to Stack Overflow, we found a popular CI/CD vs. DevOps thread viewed over 11,000 times. Another closely related CI/CD thread on the same platform sparked an active conversation that enjoyed over 129,000 views.
Clearly, this is a hot topic, and as we enter a second decade of DevOps, it is important that we clear the confusion between CI/CD and DevOps. Although continuity lies at the heart of DevOps, we need to understand that there is a subtle difference between the two terms. That’s why in this article, we will take a close look at these concepts and demystify what each involves.
So, let's dive straight in.
What is DevOps?
DevOps is a collaborative culture with a set of practices, ideas, tools, technologies, and processes that streamline the product development process. This huge cultural shift lays emphasis on effective communication, integration, and better collaboration among teams for delivering quality products. Basically, DevOps is a methodology that helps organisations build software - and their production teams - in a way that enables continuous rapid deployment.
In the words of Patrick Debois, the Godfather of DevOps, “it is a movement of people who think it’s time for a change in the IT Industry - time to stop wasting money, time to start delivering great software, and building systems that scale and last”.
Here is a simple illustration of DevOps in a nutshell.
The purpose of DevOps
Historically, there has been a serious disconnect between the development and operations teams in software production. Lack of cooperation among teams often resulted in confusion and tons of challenges along the way. This is where DevOps comes into play. The culture focuses on merging the development and operations roles - and the processes involved throughout the production cycle - to achieve common business goals. Embracing DevOps helps put together a more streamlined, agile and efficient process of software production. It’s all about maintaining a common, shared culture, enhanced collaboration and shared business processes.
An example of DevOps
Much has been said on what DevOps is, and its unlimited possibilities in the software delivery process. So, let’s take a close look at how Facebook uses DevOps as a catalyst for growth.
Facebook is one company that constantly changes our view on software development. Its product development approach has matured and continued to improve over time. A significant part of its approach, such as code ownership, automation, incremental changes, and continuous improvement, are apparently DevOps practices. In 2015, it completed migrating its infrastructure and back-end to the Chef Configuration management platform. Through Chef, Facebook can manage thousands of servers and multiple code updates daily using DevOps. They also made some cookbooks accessible to the public.
The above example from Facebook exemplifies how companies can rely on DevOps to stay on top of the game. This software development approach has tons of quantifiable business and technical benefits. In today’s digital world, organisations must make their product deployment systems more robust and flexible - DevOps provides a proven way of achieving this.
What is CI/CD?
CI/CD is a collection of operating principles and practices that help development teams to deliver frequent code changes reliably. It is the ongoing automation and monitoring throughout the application life cycle - from integration and testing to product delivery and deployment phases. The implementation of these practices, also known as the “CI/CD pipeline”, is one of the best workflows that a DevOps team can follow.
Martin Fowler, Chief Scientist at ThoughtWorks, says that the eponymous CI/CD pipeline helps eliminate bottlenecks in the software delivery process. Quoting his words, “Continuous Integration usually refers to integrating, building, and testing code within the development environment. Continuous Delivery builds on this, dealing with the final stages required for production deployment.
Below is an illustration of a CI/CD pipeline.”
Continuous integration (CI)
Continuous integration is a development process of automatically building and performing unit tests upon making changes to the source code. CI requires development teams to integrate code changes into a shared source code repository multiple times every day. In their Continuous Delivery Book, Jez Humble & David Farley say that “the most important practice for continuous integration to work properly is frequent check-ins to trunk or mainline. You should be checking in your code at least a couple of times a day.” Each update pushed to the repository is then verified through an automatic build, thus allowing developers to detect problems and fix bugs easily. According to GitLab, continuous integration helps development teams improve their code quality.
The main goal of continuous integration is to create a consistent way to automatically build and test applications. It ensures that a change from one developer is suitable for use in the entire code base. Through continuous integration, developers can solve problems they face when writing, integrating, testing and delivering software applications to end-users.
Continuous Delivery (CD)
Continuous delivery involves a set of processes that helps developers build a refined software version by continuously getting feedback from users and implementing necessary fixes. It entails all activities in continuous integration and continuous testing, coupled with human-influenced decisions that improve the quality of software. Continuous delivery requires a staging area where code changes can be verified and reviewed manually. Upon verification, the software can be released for production. In other words, the build is sent to a production environment for user acceptance testing (UAT) before deployment.
Continuous Deployment (CD)
In continuous deployment (also known as CD), all changes made by the developing teams are automatically passed through the pipeline, and upon passing test stages, the updated product is pushed to production for release. Continuous deployment does not require manual verification because automated testing is incorporated throughout the development and release processes. As such, most attributes of the application rely heavily on the quality of the software test suite. Continuous deployment allows development teams to have multiple app deployments on any day without worrying about a major release.
The purpose of CI/CD?
CI/CD puts together all code changes into a single repository and runs automated tests. As such, the product is fully developed and ready for deployment throughout all phases. One of the major benefits of executing CI/CD is that it enables quicker, efficient, and automatic product updates. It also mitigates defects in products, thus ensuring higher customer satisfaction upon release.
Katalon sums up the benefits of employing a sturdy CI/CD pipeline into three areas:
- Increasing “Quality at Speed”
- Adding technical values for the product development and operational teams
- Adding business values for organisations
An example of CI/CD
You can click on the Coverage badge, which takes you to Coveralls, a tool that displays coverage reports for all unit tests. The CircleCI badge, on the other hand, shows a history of all builds run against the pull requests submitted by contributors. By clicking on a build, you can view every step in their CI process. This also allows you to see the configuration of their pipeline.
As shown in the graphic below, the key difference between continuous integration, continuous delivery, and continuous deployment lies in the scope of automation applied.
The goal of CI/CD and the entire DevOps is to make the software process quicker and more robust. For easier understanding - DevOps, as a culture, provides a set of ideal practices for quality software development. On the other hand, CI/CD refers to all activities carried out along the software delivery process - from building to final deployment.
Max Shash, Chief Marketing Officer, DeployPlace