An Architect's Guide To DevOps Pipelines - Continuous Integration & Continuous Delivery (CI - CD) - Enable Architect 2020 GDGDGDGD
An Architect's Guide To DevOps Pipelines - Continuous Integration & Continuous Delivery (CI - CD) - Enable Architect 2020 GDGDGDGD
Constructing a DevOps pipeline is an essential part of a software architect's process when working in a software
engineering team. In the past, as I participated as a technical interviewer at Red Hat, I was quite surprised to find very
few people could clearly describe a DevOps pipeline and a continuous integration and continuous deployment
(CI/CD) pipeline. You will understand what these pipelines are by reading this article.
What is DevOps?
Let's have a little discussion about what DevOps is before jumping into the DevOps pipeline. In common practice,
DevOps is a software development methodology often associated with specific practices and tools that help
implement those practices. It is mainly focused on increasing the frequency of software deliveries to build more
resilient systems.
You can think of DevOps like other software development processes such as agile, Lean, scrum, or waterfall.
One of the most approachable books written about the DevOps process is The Phoenix Project by Gene Kim. A
reference page in the back of the book explains the software deployment frequencies of different companies. It
states that a typical enterprise releases software only once every nine months. In contrast, Netflix, releases software
updates thousands of times per day due to its well-constructed DevOps process.
Source: O'Reilly
More releases without making significant changes to team processes can lead to less resiliency rather than
more. DevOps processes that focus only on frequency of delivery can be misleading and undesirable. A DevOps team
also needs to emphasize the system's reliability, safety, observability, and resiliency. These aspects are positively
affected by more frequent releases, as discussed in Accelerate by Nicole Forsgren, Jez Humble, and Gene Kim.
Now that you understand what the DevOps process is, what does DevOps promise to deliver? To understand this, you
need to understand what the DevOps pipeline is.
DevOps downloads
DevOps: The IT leader's guide
eBook: The Path to GitOps
Getting started with
DevSecOps
Streamlining DevOps in hybrid,
multi-cloud, on-premises, and
edge environments
The ultimate CI/CD resource
guide
A DevOps pipeline is important to understand based on the organization that will use it. These teams can be largely
broken down into two aspects: infrastructure (operations) and code development (development). Which role
you belong to depends on a number of different factors, including the existing DevOps pipeline, the size of your
company, your position at the company, but it is most connected to whether you produce software (development) or
manage where software is deployed (operations).
For example, imagine that your company is a startup that only has a few engineering team members. The company
has no previous DevOps pipeline. As an architect, your responsibility is to create an elegant solution that improves
every software delivery aspect. You need to come up with at least the minimum viable product (MVP) pipeline that
delivers the infrastructure aspect as well as the code deployment aspect.
If you work in a large enterprise with an existing software delivery methodology, you will need to focus on both
the infrastructure side as an operations engineer and the code delivery side as an application developer. That need to
span this gap is the true goal of DevOps. Understanding what stage your team's DevOps process is at, your role, and
the size of your team helps you determine what you need to focus on when you join an engineering team.
Now we finally get to the exciting part: Learning how to design a DevOps pipeline. First, I will cover the infrastructure
side and then move on to the code development side.
The architecture diagram below illustrates a general DevOps pipeline process applicable to an infrastructure engineer
or an architect.
The high-level, step-by-step process is:
First, here are a few examples of the DevOps pipeline tools. Note that these tools are usually equivalent to the
DevOps pipeline for the application developers:
Jenkins
Harness
Argo
GitLab
G t ab
GitHub Action
You also have several choices for SCM tools. Here are a few examples:
GitHub
BitBucket
GitLab
Subversion
If you want to store operating system images or container images, you need some type of image registry. Here are a
few options you can explore:
Quay
Artifactory
Nexus
DockerHub
Most importantly, to perform the infrastructure-related activities, such as provisioning a cluster or building a custom
VM image, you need to have configuration management tools and shell scripts, such as the ones below:
Ansible: This configuration management tool is excellent at installing packages, creating a VM image, and
carrying out other VM-related operations.
Bash script: While it takes more work to make it idempotent, Bash can be useful for all types of operations
tasks.
Lastly, you need a cloud provider or an environment to deploy and manage your virtual machine, a Kubernetes
container, or a cluster. Any public cloud provider will work, but you can start with a virtual machine or a container
environment running on your local computer.
[ Learn how to build a flexible foundation for your organization. Download An architect's guide to
multicloud infrastructure. ]
Here is a possible architecture diagram illustrating the DevOps pipeline for the application developers. Note that this
is a simplified diagram in a non-container context. With the container-based approach, additional steps can be
introduced.
The high-level step-by-step process is listed below:
SonarQube
Semmle
Lint
Checkstyle
To build software, you need a build tool. The recommended tool differs based on the programming runtime. Here are
some common build tools for popular programming runtimes:
Continuous Integration: Developers merge their changes back to the main branch as often as possible. The
developer's changes are validated by creating a build and running automated tests against the build.
Continuous Delivery: Releases new changes to one or more environments, including production. This means
that on top of having automated testing, you also have an automated release process, and you can deploy your
application at any point in time by clicking on a button.
Continuous Development: Every change that passes all stages of your production pipeline is released to
production. There's no human intervention, and only a failed test will prevent a new change to be deployed to
production.
While a team can use the Jenkins pipeline to implement the entire CI/CD process, the industry trend now leans
toward adopting a separate DevOps pipeline tool for the CD process. For example, while one company may still use
Jenkins to build a software or a VM image, they may use Harness or Argo to deliver the package to a cluster or VM
environment.
When applied to both operations and application development, these technologies lead to more deployments per
day, which has been shown by research to lead to more resilient systems. That's why DevOps is powerful.
Bryant Son
Bryant Jimin Son is a Senior Consultant at Red Hat, a technology company known for its Linux server and open
source contributions.
More about me
Related Content
4 steps for creating a center of 4 tactics to modernize your application
excellence (CoE) in your organization portfolio at scale
Learn how we organized our CoE to provide How can you modernize thousands of applications
leadership, share critical expertise, and increase simultaneously in a landscape of changing security,
technology adoption. reliability, and operations requirements?
Subscribe
Privacy Statement
The opinions expressed on this website are those of each author, not of the author's employer or of Red Hat. The content published on this site are
community contributions and are for informational purpose only AND ARE NOT, AND ARE NOT INTENDED TO BE, RED HAT DOCUMENTATION,
SUPPORT, OR ADVICE.
Red Hat and the Red Hat logo are trademarks of Red Hat, Inc., registered in the United States and other countries.