This tool allows you to easily deploy Docker Image(s) to Marathon.
Features:
- Has a single dependency - Go
- Validates your Marathon YAML file and converts to JSON
- Checks that your Docker images are published before deploying to Marathon
- Automatically interpolates image tags via customizable template
- e.g.
{{ .GitRevCount }}-{{ .GitRevShort }}
=93-5814f5e
- e.g.
- Supports multiple deployment targets/environments
Assuming:
- you have a correctly configured
$GOPATH
- you have
$GOPATH/bin
in your$PATH
go get -u github.com/cloudflare/cfdeploy
cfdeploy # shows help message
Create a deploy.yaml
file alongside your Marathon staging.yaml
and prod.yaml
files such as this:
marathon:
host: marathon.example.com
image:
repository: index.docker.io
tagTemplate: "{{ .GitRevCount }}-{{ .GitRevShort }}"
environments:
prod:
marathon:
file: prod.yaml
images:
svc:
name: library/hello-world
staging:
marathon:
file: staging.yaml
images:
svc:
name: library/hello-world
Then, modify your Marathon files to have the Docker image replaced into them, e.g:
...
container:
type: DOCKER
docker:
image: {{ index .Images "svc" }}
...
Note: the key "svc"
must match the key under environments.ENV.images.KEY
in your deploy.yaml
file.
If you have direct (unauthenticated) access to your Marathon instance:
cfdeploy -e staging
or
cfdeploy -e staging -y
to skip the confirmation prompt.
If you need to specify a custom Marathon hostname or headers:
cfdeploy -e staging
-marathon.host my-marathon.example.com \
-marathon.curlopts '-H "OauthEmail: ..." -H "OauthAccessToken: ..." -H "OauthExpires: ..."'