Heroku Container Deploy
Deploy pre-built docker images, typically with docker-compose-buildkite-plugin, to using the Heroku Container Registry. It follows the official recommended steps for Docker deploys on Heroku. See ecr-buildkite-plugin for authenticating with AWS ECR.
Design Decision
Heroku API is favoured over depending on the Heroku CLI. This helps to avoid problems with transitive npm dependencies causing CI blockage at scale.
Example
Deploy a pre-built images from ECR to heroku container registry.
steps:
- label: ":heroku: Deploy my-app app (web)"
plugins:
- envato/heroku-container-deploy#v1.3.0:
app: my-app
process-type-images:
- web:XXXXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com/my-repo:heroku-web-${BUILDKITE_COMMIT}
Deploy multiple pre-built images from ECR to heroku container registry.
steps:
- label: ":heroku: Deploy my-app app (web and worker)"
plugins:
- envato/heroku-container-deploy#v1.3.0:
app: my-app
process-type-images:
- web:XXXXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com/my-repo:heroku-web-${BUILDKITE_COMMIT}
- worker:XXXXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com/my-repo:heroku-worker-${BUILDKITE_COMMIT}
Deploy multiple pre-built images including a Release Phase from ECR to heroku container registry. Plugin will stream the release output to Buildkite logs.
steps:
- label: ":heroku: Deploy my-app app (web, worker and release)"
plugins:
- envato/heroku-container-deploy#v1.3.0:
app: my-app
process-type-images:
- web:XXXXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com/my-repo:heroku-web-${BUILDKITE_COMMIT}
- worker:XXXXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com/my-repo:heroku-worker-${BUILDKITE_COMMIT}
- release:XXXXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com/my-repo:heroku-release-${BUILDKITE_COMMIT}
Configuration
app
(Required, string)
Heroku app name
key-name
(Optional, string)
The name of the environment variable that contains the Heroku API key. Defaults to HEROKU_API_KEY
process-type-images
(Required, Array of string)
List of process types and their image repository to deploy.
<proc-type>:<ecr>:<tag>
releasing
(Optional, Array of string)
List of process type names to be released. It will allays pull, tag and push all images, but it will only patch the Heroku Formation API with these images.
Default: All process types in process-type-images
except one named migrations
Developing
Testing
docker-compose run --rm tests
Linting
docker-compose run --rm lint