blob: 889561c6d928f0292668348bfbb508c1287da967 [file] [log] [blame] [view] [edit]
This directory contains terraform configuration files to manage pipelines on Buildkite.
```
terraform
|
|- bazel # Configuration files for bazel
|- bazel-testing # Configuration files for bazel-testing
|- bazel-trusted # Configuration files for bazel-trusted
```
The terraform [state](https://www.terraform.io/docs/language/state/index.html) is stored in GCS bucket `bazel-buildkite-tf-state` (non-public).
## Setup
Please follow these steps to setup your local terraform environment:
1. Install [terraform](https://www.terraform.io/downloads.html).
1. Install Google Cloud SDK and authenticate using application default credentials. Make sure you have permissions to access bucket `bazel-buildkite-tf-state`. Check [here](https://www.terraform.io/docs/language/settings/backends/gcs.html#authentication) for more details about authentication.
1. Generate Buildkite API token by following this [doc](https://registry.terraform.io/providers/buildkite/buildkite/latest/docs). Make sure required scopes are selected and GraphQL is enabled.
1. Use environment to allow `terraform` read the API token:
```
export BUILDKITE_API_TOKEN=TOKEN
```
1. Run `terraform init` in one of the configurtion directories, e.g. `terraform/bazel-testing`.
## Add new pipeline
1. Add `buildkite_pipeline` resource, e.g.:
```
resource "buildkite_pipeline" "android-testing" {
name = "Android Testing"
repository = "https://github.com/googlesamples/android-testing.git"
steps = templatefile("pipeline.yml.tpl", { flags = ["--file_config=bazelci/buildkite-pipeline.yml"] })
}
```
You can check all available properties [here](https://registry.terraform.io/providers/buildkite/buildkite/latest/docs/resources/pipeline).
1. Run `terraform plan` to preview the change.
1. Run `terraform apply` to apply the change.
## Update managed pipeline
1. Edit `buildkite_pipeline` resource.
1. Run `terraform plan` to preview the change.
1. Run `terraform apply` to apply the change.
## Import existing pipeline from Buildkite
1. Add `buildkite_pipeline` resource, e.g.:
```
resource "buildkite_pipeline" "foo" {
}
```
It is recommended to name the resource with the slug of existing pipeline.
1. Find the existing pipeline ID. You can find it in the `GraphQL API Integration` section of the `Pipeline Settings` of that pipeline on Buildkite. e.g. `UGlwZWxpbmUtLS0xYmJmYmM2NS0wMzE5LTQxMDMtOGY2Yy0zOGQ3MDQyYzVlZjc=`
1. Bind the resource with existing pipeline:
```
terraform import buildkite_pipeline.foo PIPELINE_ID
```
1. The pipeline should be imported. Run `terraform plan` to see the difference and update the resource accordingly if you don't want to make the change.