A pipeline is a sequence of steps that we must go through to accomplish a goal. We looked at this concept in Chapter 7, Pipe-and-Filter Architectures. The same concept in this context is used to execute a sequence of steps in our release management process. A pipeline will assist us during the software delivery process in different environments. We are going to create a simple pipeline that consists of five stages:
- Automatically building our projects
- Running tests (such as unit and integration)
- Deploying to staging
- Running an acceptance test
- Deploying to production (this includes deploying our application in a cloud or on-premise server)
The following diagram shows how the pipeline will look:
Each stage could have one or more tasks or jobs, such as creating a database schema, provisioning a box with Vagrant, cloning a Docker container, and so on.
The previous diagram is divided into two parts:
- Continuous integration
- Continuous deployment
In the next few sections, we are going to briefly look at these two concepts.