CircleCI
The Buildkite migration tool helps you convert your CircleCI pipelines into Buildkite pipelines. This page lists the Buildkite migration tool's currently supported, partially supported, and unsupported CircleCI keys when translating from CircleCI pipeline configurations to Buildkite pipelines.
For any partially supported and unsupported Keys listed in the tables on this page, you should follow the instructions provided in their relevant Notes, for details on how to successfully complete their translation into a working Buildkite pipeline.
Using the Buildkite migration tool with CircleCI
To start converting your CircleCI pipeline configurations into Buildkite Pipelines format:
- Open the Buildkite migration interactive web tool in a new browser tab.
- Select CircleCI at the top of the left panel.
- Copy your CircleCI pipeline configuration and paste it into the left panel.
- Select Convert to reveal the translated pipeline configuration in the Buildkite Pipeline panel.
For example, when converting the following example CircleCI pipeline configuration:
version: 2.1
jobs:
build:
docker:
- image: cimg/node:18.20
steps:
- checkout
- run:
name: Install dependencies
command: npm install
workflows:
build-workflow:
jobs:
- build
The Buildkite migration tool should translate this to the following output:
---
steps:
- commands:
- "# No need for checkout, the agent takes care of that"
- echo '~~~ Install dependencies'
- npm install
plugins:
- docker#v5.10.0:
image: cimg/node:18.20
agents:
executor_type: docker
key: build
The Buildkite migration tool interface should look similar to this:
You might need to adjust the converted Buildkite pipeline output to ensure it is consistent with the step configuration conventions used in Buildkite Pipelines.
The Buildkite migration tool supports the use of YAML aliases in CircleCI pipeline configurations, which are reusable configuration snippets that can applied to specific points in a pipeline configuration. A YAML alias is defined by an &
(anchor, for example, &tests
) within the top-level aliases
key and substituted into a CircleCI pipeline configuration with an *
(for example, *tests
). A configuration defined by an alias is respected and parsed at its specified section in the pipeline configuration. Also note that more complex (for example, multi-line) anchors defined as a YAML alias in a CircleCI pipeline configuration are expanded upon their translation into Buildkite pipeline format.
Remember that not all the features of CircleCI can be fully converted to the Buildkite Pipelines format. See the following sections to learn more about the compatibility, workarounds, and limitation of converting CircleCI pipelines to Buildkite Pipelines.
Logical operators (helpers)
Key |
Supported | Notes | |||
---|---|---|---|---|---|
Key |
and |
Supported | Partially | Notes | Logical operator for denoting that all inputs required to be true. Supported alongside the when key within setting up conditional workflow runs. |
Key |
or |
Supported | Partially | Notes | Logical operator for describing whether any of the inputs are true. Supported alongside the when key within setting up conditional workflow runs. |
Key |
not |
Supported | Partially | Notes | Logical operator for negating input. Supported alongside the when key within setting up conditional workflow runs. |
Commands
Key |
Supported | Notes | |||
---|---|---|---|---|---|
Key |
commands |
Supported | Yes | Notes | A command defined in a CircleCI pipeline is a reusable set of instructions with parameters that can be inserted into required job executions. Commands can have their own lists of steps that are translated through to the generated command step's commands . If a command contains a parameters key, these parameters are respected when used in jobs and workflows. When not specified, the parameters' default values are used. |
Executors
Key |
Supported | Notes | |||
---|---|---|---|---|---|
Key |
executors |
Supported | Yes | Notes | The executor key defined at the top level in a CircleCI workflow is mapped to the use of the executor key specified within a specific job . Supported execution environments include machine , docker , macos , and windows . Further information can be found in the Jobs > Executors table below. The execution environment in Buildkite Pipelines is specified with each environment's applied tags in their generated command step, which can be targeted when creating builds. |
Jobs
General
Key | Supported | Notes | |||
---|---|---|---|---|---|
Key |
jobs.<name>
|
Supported |
Yes |
Notes |
Named, individual |
Key |
jobs.<name>.environment
|
Supported |
Yes |
Notes |
The |
Key |
jobs.<name>.parallelism
|
Supported |
No |
Notes |
A |
Key |
jobs.<name>.parameters
|
Supported |
Yes |
Notes |
Reusable keys that are used within |
Key |
jobs.<name>.shell
|
Supported |
No |
Notes |
The |
Key |
jobs.<name>.steps
|
Supported |
Partially |
Notes |
A collection of non- |
Key |
jobs.<name>.working_directory
|
Supported |
Yes |
Notes |
The location of the executor where steps are run. If set, a "change directory" ( |
Executors
While the Buildkite migration tool will translate the following listed executor types, to use the generated steps in your translated Buildkite pipeline, your targeted agents must have the relevant operating system (OS), as well as dependencies, and tooling (for example, Docker or XCode) available on them. Buildkite offers the Elastic CI Stack for AWS as a fully scalable Buildkite Agent fleet on AWS with a suite of tooling installed by default. Additionally, customized agents can be set up to target builds that requires a specific OS, tooling, or both. Or you can use Buildkite hosted agents—a fully-managed solution offered by Buildkite.
Key | Supported | Notes | |||
---|---|---|---|---|---|
Key |
jobs.<name>.docker
|
Supported |
Yes |
Notes |
Specifies that the |
Key |
jobs.<name>.executor
|
Supported |
Yes |
Notes |
Specifies the execution environment based on an executor definition supplied in the top-level |
Key |
jobs.<name>.macos
|
Supported |
Yes |
Notes |
Specifies that the |
Key |
jobs.<name>.machine
|
Supported |
Yes |
Notes |
Specifies that the |
Key |
jobs.<name>.resource_class
|
Supported |
Yes |
Notes |
The specification of compute that the executor will require for running a job. This is used to specify the |
Key |
jobs.<name>.windows
|
Supported |
Yes |
Notes |
Specifies that the |
Orbs
Key |
Supported | Notes | |||
---|---|---|---|---|---|
Key |
orbs |
Supported | No | Notes | Orbs are currently not supported by the Buildkite migration tool and should be translated by hand if their equivalent functionality is required within a Buildkite pipeline. In Buildkite Pipelines, reusable plugins can provide a similar functionality for integrating various common (and third-party integration-related) tasks throughout a Buildkite pipeline, such as logging into ECR, running a step within a Docker container, running multiple Docker images through a compose file, triggering builds in a monorepo setup, to list a small number of these plugins. |
Key |
Docker orbs
|
Supported | Partially | Notes | Docker orbs are converted but their translation is only an approximation. It is recommended that you reconstruct any orb-related logic in a Buildkite pipeline instead based on the recommendations outlined in orbs . |
Parameters
Key |
Supported | Notes | |||
---|---|---|---|---|---|
Key |
parameters |
Supported | No | Notes | Pipeline-level parameters that can be used in the pipeline-level configuration. Pipeline-level environment variables allow for utilizing variables in a Buildkite pipeline configuration with conditionals. |
Setup
Key |
Supported | Notes | |||
---|---|---|---|---|---|
Key |
setup |
Supported | No | Notes | Allows for the conditional configuration trigger from outside the .circleci directory. While this is not directly compatible with Buildkite Pipelines, Buildkite Pipelines offers trigger steps, which allow for triggering builds from another pipeline. |
Version
Key |
Supported | Notes | |||
---|---|---|---|---|---|
Key |
version |
Supported | No | Notes | The version of the CircleCI pipeline configuration applied to this pipeline. Since Buildkite Pipelines is a fully-SaaS product, there is no equivalent mapping for this key in Buildkite Pipelines, and this key can generally be ignored. |
Workflows
Key | Supported | Notes | |||
---|---|---|---|---|---|
Key |
workflows
|
Supported |
Yes |
Notes |
A collection of |
Key |
workflows.<name>
|
Supported |
Yes |
Notes |
An individual named workflow that makes up a part of the CircleCI pipeline's definition. If a CircleCI pipeline has more than one |
Key |
workflows.<name>.jobs
|
Supported |
Yes |
Notes |
The individually named, non- |
Key |
workflows.<name>.jobs.<name>.branches
|
Supported |
No |
Notes |
The |
Key |
workflows.<name>.jobs.<name>.filters
|
Supported |
Yes |
Notes |
The |
Key |
workflows.<name>.jobs.<name>.filters.branches
|
Supported |
Yes |
Notes |
The specific |
Key |
workflows.<name>.jobs.<name>.filters.tags
|
Supported |
Yes |
Notes |
The specific |
Key |
workflows.<name>.jobs.<name>.matrix
|
Supported |
Yes |
Notes |
The |
Key |
workflows.<name>.jobs.<name>.requires
|
Supported |
Yes |
Notes |
A list of |
Key |
workflows.<name>.when
|
Supported |
Yes |
Notes |
Conditional execution key that allows workflows to run under certain conditions, such as those based on pipeline parameters. The Buildkite migration tool allows for the specification using logical operators |