This is a GoCD agent docker image based on offical GoCD ubuntu-18.04 docker image.
It is an opinionated variant with several enhancements:
- Uses s6 for init system in the container
- Image runs a docker daemon (so you end up with docker in docker)
- Uses Dojo and associated practices to provide sufficient tools of any projects. TL;DR: you don't need to install anything on the agent image.
- In addition to configuration via environment variables, it's possible to obtain secrets from AWS SSM store or HashiCorp Vault.
- It can handle temporary unavailability of the gocd server by restarting agent daemon in case it crashes.
This is a WIP in attempt to make a generic agent that is flexible enough to fit everyone. I'm trying to gather best pieces from various GoCD deployments that I did before. Feel free to try out and comment.
If you don't want the image to setup secrets on start, just set GOCD_SKIP_SECRETS=true.
Otherwise the image expects that you have provided all required secrets via environment variables or specified SECRET_STORE.
Required environment variables (when SECRET_STORE is not set):
- AGENT_AUTO_REGISTER_KEY
- GOCD_SSH_KEY
SECRET_STORE is not set by default, it can be either aws or vault, see lower for details.
When using AWS secret store, the image expects that SSM paramemeter store contains:
${AWS_SECRET_STORE_PATH}/autoregistration_key${AWS_SECRET_STORE_PATH}/go_id_rsa- with SSH private key that should be given to the agent (for git access over ssh)
You can configure SSM_SECRET_STORE_PATH, by default it's gocd.
You must specify following environment variables:
- AWS_REGION
When using vault secret store, the image expects that vault KV store contains:
${VAULT_SECRET_STORE_PATH}/autoregistration_key${VAULT_SECRET_STORE_PATH}/go_id_rsa- with SSH private key that should be given to the agent (for git access over ssh)
You can configure VAULT_SECRET_STORE_PATH, by default it's gocd.
You must specify following environment variables:
- VAULT_TOKEN
- VAULT_ADDR
Start the container with this:
docker run -d -e GO_SERVER_URL=... kudulab/gocd-agent
This will start the GoCD agent and connect it the GoCD server specified by GO_SERVER_URL.
Note: The
GO_SERVER_URLmust be an HTTPS url and end with/go, for e.g.http://ip.add.re.ss:8153/go
To start a gocd-server container named gocd_server:
docker run -ti -p8153:8153 -p8154:8154 --name gocd_server gocd/gocd-server:v20.2.0
You can connect a gocd-agent container to it by doing:
docker run -ti --rm --link gocd_server:gocd-server -e GO_SERVER_URL=http://gocd-server:8153/go -e AGENT_AUTO_REGISTER_KEY=abc -e GOCD_SSH_KEY=a --privileged --name agent kudulab/gocd-agent
Beware of SSL changes in 20.2
docker run -d \
-e AGENT_AUTO_REGISTER_KEY=... \
-e AGENT_AUTO_REGISTER_RESOURCES=... \
-e AGENT_AUTO_REGISTER_ENVIRONMENTS=... \
-e AGENT_AUTO_REGISTER_HOSTNAME=... \
kudulab/gocd-agent
If the AGENT_AUTO_REGISTER_* variables are provided (we recommend that you do), then the agent will be automatically approved by the server. See the auto registration docs on the GoCD website.
docker run -d -e AGENT_FAST_POLLING=1 kudulab/gocd-agent
If the AGENT_FAST_POLLING variable is set to anything at all, the agent will poll the server for work much more frequently than the default settings. For use with a small agent fleet.
To configure SSL parameters, pass the parameters using the environment variable AGENT_BOOTSTRAPPER_ARGS. See this documentation for supported options.
docker run -d \
-e AGENT_BOOTSTRAPPER_ARGS='-sslVerificationMode NONE ...' \
kudulab/gocd-agentThe GoCD agent will store all configuration, logs and perform builds in /godata. If you'd like to provide secure credentials like SSH private keys among other things, you can mount /home/go.
docker run -v /path/to/godata:/godata -v /path/to/home-dir:/home/go kudulab/gocd-agent
The agent's space might fill up quick. There's a cron job that removes non-dojo images older than DELETE_IMAGES_OLDER_THAN_DAYS, by default 180 days.
JVM options can be tweaked using the environment variable GOCD_AGENT_JVM_OPTS.
docker run -e GOCD_AGENT_JVM_OPTS="-Dfoo=bar" kudulab/gocd-agent
The GoCD server runs as the go user, the location of the various directories is:
| Directory | Description |
|---|---|
/godata/config |
the directory where the GoCD configuration is store |
/godata/pipelines |
the directory where the agent will run builds |
/godata/logs |
the directory where GoCD logs will be written out to |
/home/go |
the home directory for the GoCD server |
- Check if the docker container is running
docker ps -a - Check the STDOUT to see if there is any output that indicates failures
docker logs CONTAINER_ID - Check the agent logs
docker exec -it CONTAINER_ID /bin/bash, then runless /godata/logs/*.loginside the container.