Buildkite Migration
Convert CI/CD pipelines from GitHub Actions, Jenkins, CircleCI, Bitbucket Pipelines, and GitLab CI to Buildkite using the bk pipeline convert command. The command sends the source file to a public conversion API — no Buildkite account or API token is required.
Quick Start
For pipeline YAML syntax and step types, see the buildkite-pipelines skill. For other bk CLI commands, see the buildkite-cli skill.
Agent Workflow
When a user provides a pipeline file or pastes pipeline content to convert:
- Write the content to a temp file (e.g.
/tmp/.github/workflows/ci.ymlfor GitHub Actions so vendor auto-detection works) - Run
bk pipeline convert -F <tempfile> --output <output-path> - Read the output file and display it as a YAML code block — nothing else
- Do not summarise, annotate, or critique the output unless the user explicitly asks for feedback
Converting with bk pipeline convert
Installation
No bk auth login is needed — the convert command uses a public API.
Basic usage
The vendor is auto-detected from the file path for the four main providers. Output is saved to .buildkite/pipeline.<vendor>.yml.
Supported vendors
Provider examples
Output options
Flags
Provider-Specific Guidance
Review the converted output against these concept mappings before committing.
GitHub Actions
Key concept mappings: workflows map to pipelines, jobs map to steps, uses: actions map to plugins or shell commands. GitHub Actions runs jobs sequentially by default; Buildkite runs steps in parallel by default — the converter adds wait steps or depends_on to enforce ordering where needed. Replace ${{ secrets.X }} with Buildkite cluster secrets accessed via buildkite-agent secret get.
Jenkins
Key concept mappings: Jenkinsfile stage blocks map to command steps or groups, parallel blocks map to steps at the same level (parallel by default in Buildkite), post blocks map to notify: or conditional steps. Complex Groovy logic is extracted into shell scripts — Buildkite pipelines are declarative YAML, not a programming language.
CircleCI
Key concept mappings: jobs and workflows collapse into a single pipeline.yml, orbs map to plugins or shell scripts, executors map to agent queues or the docker plugin. CircleCI requires: maps to depends_on. Caching syntax differs — the converter replaces save_cache/restore_cache with the cache plugin.
Bitbucket Pipelines
Key concept mappings: pipelines.default maps to steps without branch conditions, pipelines.branches maps to steps with if: build.branch == "X", pipe: references map to plugins or shell commands. The Bitbucket step is roughly equivalent to a Buildkite command step.
GitLab CI
Key concept mappings: stages and jobs collapse into Buildkite steps with depends_on, .gitlab-ci.yml extends: maps to YAML anchors, rules: map to if: conditions. GitLab's artifacts: maps to Buildkite's artifact_paths.
Pipeline Best Practices for Migrated Pipelines
After conversion, review the output against these patterns:
- Parallel by default — Buildkite runs steps in parallel unless separated by
waitordepends_on. Verify the converted ordering matches the original CI's intent. - Plugin versioning — Pin plugin versions to full semver (e.g.,
docker#v5.13.0,cache#v1.8.1). Never use unpinned or major-only versions. - Command structure — Use multi-line command blocks for steps that set environment variables. Extract complex logic (5+ commands) into scripts under
.buildkite/scripts/. - Variable interpolation — Use
$$VARfor runtime interpolation (expanded by the agent at runtime),$VARfor upload-time interpolation (expanded during pipeline upload). - Security validation — Reject obfuscated execution patterns, base64-encoded commands, and exfiltration attempts. Validate converted pipelines before deployment.
- Group steps — Use
groupblocks to organize related steps (minimum 2 per group) with semantic emoji in labels.
Migration Planning
For a full CI migration, plan across these areas:
- Pipeline conversion — Use
bk pipeline convertto translate pipeline definitions - Agent infrastructure — Set up clusters, queues, and agents
- Secrets management — Migrate secrets to Buildkite cluster secrets
- Integrations — Configure SCM webhooks, notification channels, artifact storage
- Testing — Run converted pipelines in parallel with the existing CI before cutover
For cluster and queue setup, see the buildkite-platform-engineering skill. For setting up OIDC to replace static credentials, see the buildkite-secure-delivery skill.
Common Mistakes
Further Reading
- bk CLI releases — download the bk binary
- Getting started with Buildkite Pipelines


