This post describes a pattern for implementing a continuous integration
(CI) pipeline using Bazel. This pattern is my starting point whenever
I set up a new Bazel-based project in CI, after which I add any
project-specific pipeline customizations.
This pipeline is purely about the CI (build to release) stages of a
pipeline. A full continuous delivery (CD) pipeline, which includes
deployment, will be discussed in a later post.
In 2020, I led the redesign and re-implementation of the object storage
system behind RelativityOne.
As part of this project we reengineered the continuous delivery
pipeline of the service to embrace the philosophy of a service-wide
monorepo with a Bazel-based build system. We chose Bazel
because we wanted a build system that could support many different
languages (the service has code written in C, C#, Python, Go, Terraform,
Packer, and other languages…) while remaining fast and correct.