Skip to main content
blog.philz.dev

What is Buildkite?

If you're starting a new project, just skip the misery of GitHub actions and move on. Buildkite mostly gets it.

The core Buildkite noun is a Pipeline, and, as traditional for an enterprise software company, their docs don't really tell you what's what. The point is that your pipeline should be:

steps:
  - label: ":pipeline: Upload pipeline"
    command: ./build-my-pipeline.py | buildkite-agent pipeline upload
    agents:
      queue: my-queue

Pipelines can add steps to themselves. So, you can write a script to generate your pipeline (or just store it in your repo), and cat it into the buildkite-agent pipeline upload command, and that's how the rest of your steps are discovered.

Pipeline steps are each executed in their own clean checkout of what you're building. So, if you want to run the playwright tests in parallel with the backend tests (or whatever), you just declare that as two different steps, but they're part of the same thing. Pipelines have a dependency graph between steps that's conceptually similar to make. (Perhaps ninja was the Make replacement that I first heard of that did "generate the ninja graph"?)

The agents seem pretty good at manipulating Buildkite once you give them an API key. They also seem to not in-line shell scripts into the yaml, which is Obviously Good.

The ways to speed up the build is always the same: cache and parallelize. A 16-core machine for 1 minute costs the same as an 2-core machine for 8 minutes, and I know which one I'd rather wait for! Buildkite makes parallelism pretty easy.

Anyway, it's pretty good. Thanks, Buildkite.