Deploy Goon is that was originally birthed from working on deployment procedures for Anchor Tab. When I was building out our continuous integration and deployment system, I wanted a way to trigger a release on the production server without the server running Jenkins actually having SSH access to the production box. To accomplish that, I wrote a quick-and-dirty Node.js daemon that kicked off the deploy scripts when it received an HTTP request.
After some iteration on the intial idea, I ended up with the specification for what is now Deploy Goon: a simple, but powerful, remote command execution daemon configurable with JSON files.
To install Deploy Goon, you'll need to first install Node.js. You can find some excellent instructions for doing so on their website. After you have Node.js installed, execute the following command on your terminal:
$ sudo npm install -g deploy-goon
That will globally install Deploy Goon, and should drop the
deploygoon executable on your path, which is all you really
need to get started.
In the configuration above, when
http://localhost:9090/baconsauce is hit from either
whoami command will be run. If it failed, we'll dispatch an email via Mandrill to "The Boss" letting him know.
(Of course, "zzzzz" isn't a valid Mandrill API key, so you'll need to get one of those.)
Here are all the options we support in detail.
After you have this build definition, you can do the following:
$ sudo deploygoon add path/to/my-deploy-job.json
Your deploy job will then be added to the list of jobs Deploy Goon knows about. Now, all that's left is to start up Deploy Goon!
$ sudo deploygoon start
Assuming nothing went wrong, you should now have Deploy Goon running on port 9090. You should be able to trigger the deploy you described above by going sending an HTTP request to http://localhost:9090/my-job like so:
Output from the deploy job will be displayed in Deploy Goon's logfile located at
Fair question. This is a task that's easily handled by doing some quick and dirty shell scripting, as I've obviously done. And this isn't my first time writing a script like this. I actually implemented a similar ruby-specific one called unicorn-easy-restart awhile back. I decided I'm tired of re-inventing the wheel. I figured other people were as well.
My name is Matt Farmer. I'm a software engineer hailing from Atlanta, GA. I'm a member of Hacklanta. I'm a code curator for a handful of people these days, not the least of which is Anchor Tab where I serve as Lead Engineer. You can read my ramblings at my blog and on my twitter account.