Recently, I’ve been having fun with continuous integration and questions about deployment. As a result, I’ve fallen a little bit in love with Docker, which is just a lovely way to run your applications. I’m not going to go into detail because the documentation is great, and anyway this post is more of an opinion piece; if you want to know the details you can take a look at my Docker guide here: http://guide.andigital.com/devops/docker-quick-reference.html
Getting a little bit carried away with all things new and shiny, I decided to embark on implementing Shippable as our CI tool of choice. But my feelings on this topic are much more mixed.
What’s to like? Well, it's super easy to set up. You really can get a CI environment up and running in very little time - which was not my experience with Jenkins or Team City, despite assurances to the contrary. If you know you really should get something resembling CI in place but cba to actually get round to it, shippable might be what you need.
I was instantly drawn to the fact that shippable is built on docker (did I mention how great docker is?). You pop a shippable.yml in your project root directory just like your dockerfile, and with pretty similar content. That made things super easy - I already had a dockerfile, so it was just a copy, paste and tweak job, apart from the 15 submits I had to do before I finally got the syntax and space indenting right.
Unfortunately, all this dockeryness doesn't translate to easy integration with docker. Ideally, shippable would have triggered a dockerfile build and pushed this to my docker repo. In reality, and after huge amounts of faffing, I resorted to a manual download of the archive file and a little shell script to build the docker image and push it to docker hub. For the folks out there doing continuous deployment, it looks like Shippable has some decent-ish PaaS integrations, but our clients are mostly enterprise-scale outfits with multiple test environments and distributed production environments that may need a more carefully managed approach, at least as a starting point. Shippable falls a way short of having the level of control that I wanted from my CI tool.
So, a manual download and a little script and the whole thing just about does the job, but it’s hardly the new shiny I wanted. Also, when you can already do all these things in your Docker image, you can't help but wonder why you're bothering with Shippable in the first place. Especially when you find out that Docker have implemented their own automated build capability http://docs.docker.com/docker-hub/builds/. Unfortunately other work and family commitments means I don’t have time to play with this at the moment, but Docker has already gathered plenty of momentum in our team so it’s being looked at.
All the technical details for the shippable.ml, docker build file and shell script that I put together can be found here: http://guide.andigital.com/devops/CI-docker-deploy.html
But ultimately I have to face the music: if I'm serious about becoming a fully-fledged CI pro, I need to get to grips with Jenkins. The dated UI and daunting prospect of getting to grips with 1001 plugins and extensions really is no excuse. Anyway, I've heard you can run it in a docker container...
All a bit over my head, I'm afraid. I'm guessing you couldn't do it in Cobol...
ReplyDeleteActually, I can't see any reason why you couldn't have a docker container running a Linux cobol compiler or mainframe emulator which could handle cobol jobs. Still, you'd have to sort out the systems spaghetti first...
ReplyDeleteNews just out! Shippable now builds you docker image for you! http://blog.shippable.com/exciting-new-features-at-shippable
ReplyDeleteThis changes everything...
(They clearly read my blog...)
Delete