Hi John, I'm not too inclined towards Jenkins, but just that we'll have to run our own CI (instead of a hosted one like snap or travis) for doing the deployments. It could also be gocd!
Right now, we had a few things spiked as part of this story:
- We were able to run Jenkins as a Docker container, with a Shared volume that stores all the configurations/jobs. So we were able to destroy and re-create Jenkins (whenever we needed any changes to the installed packages) without losing any data. It also makes it easy to port the CI to any other server (Stuart was mentioning that we need to shift our dev environments to Azure sometime because they're having some discounts there).
- We were also able to run Jenkins slaves as docker containers which auto-attach to the master. So we can keep spawning any number of slaves and jenkins will keep accepting them. We were also able to give different slaves different labels/tags, to run real production deployment tasks in isolated instances.
- We used Credentials and SSH-Agent plugins to manage the SSH keys. So Jenkins automatically starts a java-based ssh-agent when the build starts, and shuts it down when the build stops. So our deployment tasks need no changes or tweaks for managing the ssh keys.
- We used the RVM Plugin in Jenkins, so it automatically downloads, installs and sets up RVM before the deployment. The deployment uses Chef and Knife gems (instead of globally installed chef DK).
- Finally, we also used the built-in Triggers for the WebHooks.
I'll also spike Go. There was a public docker container for Go and Go agent, so I have to find out how to manage the SSH keys, install RVM, create a Webhook, and finally save the Go configuration somewhere (maybe a shared volume) so that we can retain the configuration.