In this appendix, we’ll be taking a look back at all the CD system features that have been discussed in this book, and looking at which features are available across several common CD systems.
This book has used GitHub Actions to demonstrate many CD system features. However, when choosing which CD system is best for your needs, it is important to consider and weigh all of your options (including building your own CD system if needed—see chapter 11). We’ll be looking at several CD systems:
Argo Workflows
CircleCI
GitHub Actions
Google Cloud Build
Jenkins Pipeline
Tekton
This list is not exhaustive. Use the reference list of CD system features in the “Feature list” section when evaluating CD systems not covered here.
In the 13 chapters of this book, you’ve seen a whirlwind of features that CD systems can support to make it easy to define powerful, reusable tasks and pipelines. CD system features are highlighted in these chapters:
Chapter 2—Gives an overview of the basic elements of a CD pipeline, and defines the terminology used throughout this book to refer to pipeline elements (including events, triggers, webhooks, tasks, and pipelines)
Chapter 3—Teaches about config as code and how important it is to treat CD configuration as code by storing it in version control
Chapter 7—Shows all the places that bugs can sneak into our code and demonstrates the usefulness of periodic triggering
Chapter 9—Shows the importance of building software artifacts safely and discusses the features we need to make that happen
Chapter 12—Focuses the config-as-code lens on scripts in particular, reinforcing that all CD configuration should be treated as code, and that CD pipelines and tasks need to be reusable
Chapter 13—Shows all of the pipeline-level features we need in order to be able to build effective pipelines, and why we need the features
When evaluating CD systems, these are features to keep an eye out for. If they aren’t present, it doesn’t mean you can’t use the system; it just means there might be more work for you to do to get the same functionality.
This appendix will examine the following features across common CD systems:
Argo Workflows (https://argoproj.github.io/workflows/) is one of several projects under the Argo banner. Argo Workflows is an open source Kubernetes-native workflow engine that was donated to the Cloud Native Computing Foundation (CNCF) by Intuit (and originally created by the company Applatix). It supports CD use cases but was created to solve workflow automation use cases more broadly as well.
Safe and reliable build-process features | |
You must host and run Argo yourself; it can be used to provide a CD service within an organization. |
Containers are the basic unit of execution, providing ephemeral environments. |
Units of execution | |
Workflows (corresponding to pipelines in this book) execute Workflow templates. |
Workflow templates (reusable workflows) contain steps and/or directed acyclic graphs. |
Task and pipeline features | ||
Workflow templates are reusable, and they take input parameters and produce results via artifacts. Steps can declare inputs and outputs (which can be parameters or artifacts). | ||
Conditional execution is supported with a |
Matrix-style execution is supported via the loops feature. |
Pipelines-using-pipelines behavior can be achieved by workflow templates calling other workflow templates. |
CircleCI (https://circleci.com/docs/2.0/concepts/) is a CD system provided by the company of the same name, built around the idea of using the repo as the source of truth for CD configuration (config as code).
Triggering features |
Integrates directly with version control systems and can trigger execution on events from those systems, including GitHub and Bitbucket, and workflows can be scheduled to execute periodically. |
GitHub Actions (https://docs.github.com/en/actions) is a CD system that is built into GitHub (see appendix B for more on version control systems). GitHub Actions has been used to demonstrate many of the scenarios in this book because you can easily create your own GitHub repositories and configure your own GitHub Actions to try them out, with no cost to you. It supports the features in this book as part of its extensive functionality.
Triggering features |
Triggering on many different activity types for each repository, from scheduled cron events, to pull request updates, to interaction with GitHub issues. |
Safe and reliable build-process features | ||
It not only supports using a config-as code approach, but that is the only way to set up GitHub workflows. The definitions of these workflows live in the repository that triggers them, and it is possible to refer to workflows and actions that live in other repositories. |
When using public GitHub, the CD system is hosted and run by GitHub itself. If you use GitHub Enterprise in self-hosted mode, you are responsible for configuring and running the platform that executes the actions. |
Each GitHub Actions job is run in an ephemeral environment that is created to run the job and is torn down afterward. The job can be run as an entire VM, or a container within a VM. |
Units of execution | ||
Workflows (corresponding to pipelines in this book), orchestrate jobs. |
Jobs (corresponding to tasks in this book) contain sequentially executed steps. |
Task and pipeline features | ||
Jobs within workflows can declare and emit outputs that can be used by other jobs within the same workflow as inputs. Reusable workflows can define inputs and outputs. |
Jobs within GitHub workflows can use the |
Finally behavior is also supported using this syntax, by specifying |
By default, all jobs in a workflow will execute in parallel, unless the |
The |
Workflows can be defined as reusable workflows that can be used by other workflows. |
Google Cloud Build (GCB; https://cloud.google.com/build) is the CD platform provided by Google as part of Google’s cloud offering. Initially created as a way to build container images, it quickly expanded into being a generalized tool for CD.
Triggering features |
Triggered execution is supported based on events from integrated version control systems including GitHub, GitLab, and Bitbucket, as well as webhook triggering via GCP’s Pub/Sub and scheduled periodic triggering. |
Safe and reliable build-process features | ||
GCB triggering can be configured to read the build definition from the triggering repository, supporting config as code. |
GCB is provided as a service hosted and run by Google as part of Google Cloud Platform (GCP). |
Steps in GCB builds are executed as ephemeral containers that are run on VMs. |
Task and pipeline features | |
Builds can use inputs provided at runtime via the user-defined substitutions feature. |
By default, steps in a build execute sequentially; the |
Jenkins (https://www.jenkins.io/doc/book/pipeline/) is one of the most well known and probably the most ubiquitous CD systems. Jenkins is open source and via the huge ecosystem of plugins, can be made to do pretty much anything. In this section, we’ll assume Jenkins is being used with the Jenkins Pipeline suite of plugins, which focus on supporting CD pipelines in Jenkins.
Triggering features |
Jenkins Pipeline can be configured to trigger on a variety of events, including the |
Units of execution | |
Pipelines (corresponding to pipelines in this book) are made of stages. |
Stages (corresponding to tasks in this book), are made of steps. |
Tekton (https://tekton.dev/ and https://github.com/tektoncd) is an open source Kubernetes-based CD system that was donated to the Continuous Delivery Foundation (CDF) by Google. Its mission is to define a conforming standard that can be supported by many CD systems. The features described in this book are primarily supported by the Tekton Pipelines and Tekton Triggers projects. As the newest of the CD systems listed in this appendix, some of these features are brand-new or still in the proposal stage.
Tekton is the CD system I co-created!
Triggering features |
Triggering on any arbitrary event is enabled via the Tekton Triggers project, which supports any source of events and has built-in support for GitHub, GitLab, and Bitbucket triggering features. |
Safe and reliable build-process features | |
It can be run as a service inside of a Kubernetes cluster, and used directly or used as a platform on which to build another CD service. |
The basic unit of execution in Tekton is a container, so execution environments are completely ephemeral. |
Units of execution | ||
Pipelines (corresponding to pipelines in this book) orchestrate tasks. |
Tasks (corresponding to tasks in this book) sequentially execute steps. |
Each step is executed as a container. |
Task and pipeline features | ||
Pipelines and tasks can both define inputs ( |
Conditional execution of tasks within a pipeline is supported via the |
Finally behavior in pipelines is supported by a |
By default, any tasks in a pipeline will execute in parallel, unless a dependency has been expressed between them. Dependencies are expressed by a task declaring that it needs a |
The |
At the time of writing, work is in progress to support these features. | |
Out-of-the-box support for config as code by referencing pipelines and tasks in version control (and other locations, such as in OCI registries) directly. |
Pipelines reusing other pipelines: in the same way that pipelines orchestrate tasks, they could also refer to other pipelines. |
3.138.134.107