Skip to content

SYSTEM Cited by 1 source

Buildkite

Buildkite is a commercial hosted CI orchestrator: the control plane / UI / job-scheduler is hosted; agents (the workers that actually run steps) are customer-owned — typically EC2 or Kubernetes pods inside the customer's VPC. This split is distinctive: customer controls the execution environment, the hardware shape, and the networking path to internal caches and artifact stores, while Buildkite handles pipeline definition, scheduling, and result reporting.

Pipeline model

  • A pipeline is declared in YAML (typically generated).
  • A build is a pipeline run, triggered by a git push, PR, merge, or upload.
  • A step is one unit of work in a pipeline. Steps can be commands, scripts, blocks (human approval), triggers (another pipeline), or wait/group markers.
  • Steps run on customer-owned agents. Agents are long-running processes that pull jobs by tag/queue matching.

Dynamic vs static pipelines

Buildkite supports pipeline uploads: a step can emit a new pipeline YAML at runtime (buildkite-agent pipeline upload). This is a common source of per-commit pipeline-generation work — but it can also put expensive analyses on the critical path.

Canva's pipeline-v3 work is a concrete case study in moving away from runtime pipeline generation: patterns/static-pipeline-generation pre-computes the pipeline + out-of-band publishes an input-hash manifest, so jobs avoid the >10-min per-commit generation tax.

Use at Canva

From the Canva retrospective Buildkite is positioned as one of the external dependencies:

It has many downstream dependencies: … Some dependencies are outside Canva, such as AWS, Buildkite, GitHub, and internet mirrors (NPM, Maven, PyPI, and so on) …

And Buildkite-provided YAML is the target format of Canva's Starlark-based pipeline generator:

In this new generator, we declare the pipeline configuration in Starlark (Bazel's configuration language), which we convert to YAML, as Buildkite expects.

Canva's agents run on EC2 worker pools Canva manages (i4i.8xlarge, c6id.12xlarge) — Buildkite's split model is why changing instance shape (patterns/instance-shape-right-sizing) and warm-up (patterns/snapshot-based-warmup) are fully customer-side concerns.

Seen in

Last updated · 200 distilled / 1,178 read