What is Continuous Delivery, how does the underlying process work and what are the benefits?
The Perfection of Software Delivery
The term Continuous Delivery stands for a collection of techniques, processes and tools that enable the ongoing deployment of software in short time intervals. Continuous Delivery describes the turning away of a classical software development with the stages of development, quality assurance and delivery, which usually occur only once in each release. Continuous delivery is made possible by a largely automated pipeline – also known as a Continuous Delivery Pipeline or Continuous Deployment Pipeline.
In the Agile Manifesto, the first principle is: “The highest priority is to satisfy customers through early and continuous delivery of valuable software.”. This principle is the foundation of Continuous Delivery.
The Continuous Delivery Process
The goal of Continuous Delivery is to shorten the release time of product versions. In many organisations, it often takes months before current software versions can be delivered. There are delays, downtime and waiting times, as well as build, testing and deployment difficulties. To shorten the build-test-release cycle, the quality of each step must be improved:
- Planning the next iteration or sprint (Planning)
- Implementation of new functions (Coding)
- Creation of a new version (Building)
- Automated testing of the new version (Testing)
- Release of the new version (Releasing)
- Automated distribution of the new version (Deploying)
- Operation of the new version (Operating)
- Automated control of the new version (monitoring)
The following steps – initiated by the versioning of a source code file – usually run in detail:
- A Continuous Integration Server performs module tests, generates a build, and delivers it to a test environment.
- Various tests are performed in the test environment:
Unit tests check individual components and their functions. If this first test stage – also called Commit Stage – was successful, the Acceptance Test Stage follows with integration, acceptance and system tests (e.g. also load and performance tests).
As soon as errors are detected within the test environment, the pipeline is interrupted and the developer receives a notification.
- Often the tests are completed by manual, explorative tests.
- If all tests are passed, the software is released and delivered to production and/or customers.
Advantages of Continuous Delivery
In the course of continuous delivery, it is sometimes argued that the quality suffers due to the fast timing of the software delivery, as stability and reliability decrease. If organisations take the trouble to set up targeted continuous delivery pipelines, the opposite is often the case in practice. Continuous Delivery can offer a number of advantages:
- Time-to-market is improved because automated testing and automatic build saves a lot of time.
- The quality increases because developers can concentrate on explorative or usability tests.
- The products become better, because the continuous delivery of small innovations promotes feedback from users. If necessary, users can test ideas before whole functions are developed. This leads to more acceptance by customers and consequently to better products. At the same time, the risk of undesirable developments also decreases.
In combination with agile methods, Continuous Delivery offers the fast, reliable and repeatable delivery of software. On the other hand, there is an initial effort for setting up the Continuous Delivery Pipeline as well as the effort for maintenance and further development of the systems.
Continuous Integration is often mentioned in the course of Continuous Delivery. Together both are often abbreviated as CI/CD, although this abbreviation should not be confused with the marketing abbreviation of the same name, which stands for Corporate Identity – Corporate Design. There is a significant difference between Continuous Integration (CI) and Continuous Delivery (CD): Continuous Integration addresses the automation of the test process and is therefore part of the Continuous Delivery Pipeline. CD extends this concept by including the release process as an automated process. CD thus brings the end user into focus. And so the circle closes to the 1st principle of the Agile Manifesto.
Here you can find a series of blog posts about the development of a CI/CD pipeline on a Raspberry Pi.