|There seem to be plenty of articles relating to the creation of a DevOps process, or the creation of a Continuous Integration and / or Continuous Delivery (CI / CD) pipeline. But there seem to be very few that relate to what makes for a good DevOps process. Or in other words, what makes for a good CI / CD pipeline? If you're creating a DevOps process, what makes for a good one? What makes for a good CI / CD pipeline? In this article I will try to describe what makes for a good DevOps process, and what doesn't.
Let's start with a brief summary for those not familiar with the concept of DevOps. In a nutshell, DevOps is a relatively new concept. It's aim is to align and integrate the following core IT disciplines.
Through a set of processes, tooling and cultural changes, it helps remove / reduce barriers between these disciplines to enhance the quality and reliability of software products, and to accelerate the delivery of those software products.
- Software Development
- Quality Assurance
- IT Operations
What makes a good DevOps tool?
Agile tools are very often mistaken for DevOps tools due to their close relationship with the iterative and incremental framework of software development. While a good DevOps tool is inherently Agile, that doesn't necessarily imply that all Agile tools will be fit for purpose within the confines of a DevOps environment.
In reality, there are probably very few Agile development tools that are integrated or flexible enough to provide the full scope of features that DevOps requires. And all within a collaborative environment.
The primary goal of DevOps is to bring together the previously isolated disciplines of software development (whose goal is to create features within the software products), QA (whose goal is to ensure that those features meet customer needs and are fit for purpose) and Operations (whose goal is to main the infrastructure that these disciplines rely upon).
A good DevOps tool therefore provides these disciplines with the necessary insights they require. It provides insights not just for their own disciplines, but so that each discipline can gain insights into the other disciplines. It therefore brings them together by forming part of the overarching development lifecycle.
What makes for a good CI / CD pipeline?
A good DevOps process therefore is one that is closely aligned with Agile (from where the concept originated). What makes for a good CI and / or CD pipeline? I won't create an exhaustive list (that could form the basis for a book), but instead give a few broad tips when building your own pipeline(s).
Repeatable - You can run your pipeline as often as necessary and the exact same steps will be executed in the exact same order each and every time.
- Repeatable, reliable, consistent: This is the mantra for a good pipeline. It cannot be overstated how important these attributes are. These are the cornerstones for a good pipeline.
Reliable - Your pipeline should be robust and should not be reliant upon temporal resources. Build your pipelines using the same engineering rigour and discipline that you would apply to your code. A good pipeline should be able to withstand whatever changes the software developers commit to it during the development of a feature.
Consistent - A good pipeline should be predictable. A pipeline should create only the artifacts that it has been designed to create. It should only run the unit tests that have been designed to be executed. It should only deploy to the endpoints that have been configured. A good pipeline should be consistent and predictable to the point of being boring. In fact, with regards to pipelines, the more boring the better.
- Automation: As far as possible, the entire pipeline should be automated with no manual intervention. Other than manually triggering certain events (such as your deployment into production), the steps involved in your pipelines should all be capable of running without the need for human intervention.
This has hopefully give you an overview of what makes for a good DevOps process, and what makes for a good CI / CD pipeline. If you create your processes and pipelines with these in mind, you should be on the right tracks.
"There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult." - C.A.R. Hoare