Example repository showing how to migrate a Jenkins pipeline to Buildkite, used in the blog post Migrating a Jenkins Pipeline to Buildkite.
git clone https://github.com/buildkite/jenkins-to-buildkite.git
cd jenkins-to-buildkitedocker-compose upJenkins will be available at http://localhost:8080 (username: admin, password: admin).
This repository demonstrates converting a 92-line Jenkins pipeline to a 36-line Buildkite pipeline:
Jenkins Pipeline (app/Jenkinsfile):
- Uses matrix builds for Node.js 20 and 22
- Runs install → (lint + test in parallel) → build
- Manages workspace state between stages
- Uses plugins for features like ANSI color output
Buildkite Pipeline (.buildkite/pipeline.yml):
- Same functionality with YAML configuration
- Uses
depends_onfor explicit step dependencies - Each step gets fresh workspace (runs install separately)
- Built-in features replace most Jenkins plugins
- Uses YAML aliases to reduce duplication
| Aspect | Jenkins | Buildkite |
|---|---|---|
| Step Execution | Sequential by default | Parallel by default |
| State Management | Shared workspace | Fresh workspace per step |
| Agent Targeting | Push-based (labels) | Pull-based (queues) |
| Configuration | Groovy DSL | YAML |
| Plugins | Java-based, shared | Shell-based, per-pipeline |
├── app/ # Sample Node.js application
│ ├── Jenkinsfile # Original Jenkins pipeline (92 lines)
│ ├── package.json # Node.js dependencies and scripts
│ └── ...
├── .buildkite/
│ └── pipeline.yml # Converted Buildkite pipeline (36 lines)
├── docker-compose.yml # Jenkins setup for local testing
└── jenkins.yaml # Jenkins configuration as code
Jenkins: Push changes to trigger the Jenkins pipeline, or run manually from the web UI.
Buildkite: Connect your Buildkite account and agents to run the same workflow with the .buildkite/pipeline.yml configuration.
Both pipelines produce the same results: linted code, test coverage reports, and built static files.