In yesterdays post, i mentioned that i wanted to try get an auto deploy working for this site. It already builds auto-magically using Forestry and puts the static HTML into a Github repo, but i needed to manually update the servers hosting the site… Well, not any more!
First, Download the Webhook project (its a Go application, so it works pretty much anywhere). Copy it somewhere on your machine. Next, you need a config. I used the Github sample config from the project site and made tweaks to what script to run and what i was passing in.
next, the script to pull from Github was simple enough:
The repo should already be cloned into the folder,
/var/www/localfolder and your web server should be pointing at that also. Then, its just a matter of running the command:
./webhook --hooks github.json --verbose
--verbose tag gives you lots of info, so its handy for testing. and then your app is running and listening on the default port, 9000.
next, head over to your project on Github and go to settings:
select webhooks and add new web hook
Fill in the required details on the page, and click save.
Github will go out and have a chat with the webhook and verify it can send and receive stuff from the hook. You can see this in the deliveries section:
Clicking on these will show you the headers that were sent, along with the payload, and you can also see the response from your server. Finally, you have the option of re sending the payload, just in case anything goes wrong.
So, there you have it. A complete automated deploy across multiple servers! Any questions, leave a comment below!
[UPDATE] yesterday i mentioned i had to modify the sample that was included on the webhook site. Well, i noticed something this morning. The reason i needed it modified was the trigger rule was checking the header and the reference for the branch, but any time i ran it, it would not trigger… The reason was simple: the webhook app is expecting
application/json but i had it set to
application/x-www-form-urlencoded which is the default… the webhook app then couldn’t parse it correctly… changing that fixes the problem! happy days!