Over the last few years continuous delivery as a service has become a thing which (in theory) means I should should be able to take my deployment scripts and have them run automatically when I push something to a master branch in git and all without having to run my own software. I tried this with Codeship in its early days and something went horribly wrong, requiring me to completely wipe my website and restore from backups. This somewhat killed my enthusiasm for trying again.
To be fair to Codeship, this seems to be a very unusual experience. Most people I know sing its praises - both its capabilities and ease of use. Clearly I did something stupid somewhere and so when I decided to have another look at using a service I went back to give it another go.
The product has moved on significantly since I last visited, however it is still pretty straightforward. More importantly, this time I got it to work and didn't destroy anything in the process. So, with my extremely minor requirements in mind, I had to:
- Set it up to run my tests (just
bundle installfor me)
- Set up run my deploy script (one line to trigger the mina script)
Then just test via an empty commit to master and I was done:
git commit -m "Empty commit to test deployment" --allow-empty
This is pretty much the experience I wanted the first time around. Who knows what I did wrong. Some very minor gotchas:
- You need to run
bundle installin the test section to ensure you have your deployment dependencies in the later steps, even if you don't have any tests to run (remember kids, always write tests...)
- If your deployment scripts involve connecting to a server somewhere you're going to need your project SSH key which isn't the easiest thing to find
And that's pretty much it.
So why did I look at this again? Aside from it being one fewer task to do by hand when doing any proper work, I can now make minor changes on the go via the Github web interface and not need a properly set up environment to deploy them. More importantly, I can also give access to non-developers to edit content in that same web interface and it will automatically push without my needing to do anything. This is great as now what was a static website suddenly has a content management system attached to it.
I can also finally join the "Codeship is great" bandwagon. Sorry I'm late.