Buildkite Dynamic Pipeline Steps Example
This repository is an example Buildkite pipeline that shows how to programmatically generate dynamic steps using a shell script.
See the full Getting Started Guide for step-by-step instructions on how to get this running.

How does it work?
This pipeline starts with a single job that runs:
.buildkite/pipeline.sh | buildkite-agent pipeline upload
The script .buildkite/pipeline.sh does the following:
- Creates a test step for each subdirectory in specs
- Adds a deploy step if the build is on the
main
branch
For non-main branches build it generates:
steps:
- command: "specs/controllers/test.sh"
label: "controllers"
- command: "specs/features/test.sh"
label: "features"
- command: "specs/models/test.sh"
label: "models"
For a main
branch build it generates:
steps:
- command: "specs/controllers/test.sh"
label: "controllers"
- command: "specs/features/test.sh"
label: "features"
- command: "specs/models/test.sh"
label: "models"
- wait
- command: "echo Deploy!"
label: ":rocket:"
More ideas
What else could you do? The possibilities are endless. You can use this technique for custom deploy workflows, QA gates, conditional rollbacks, etc.
Tools like Jobsworth use dynamic steps to manage complex deployment logic.
License
See LICENSE.md (MIT)