Continuous integration is a hot topic across the web right now and most conferences have at least a few devops talks that touch on CI and build tools. They usually go something along the lines of, use Phing with Jenkins and touch on the fact that Jenkins used to be called Hudson, has been around for ever and has a plugin for just about everything. I’m not going to mention Jenkins as we explore a few hosted CI solutions.
Managing any server is a timely process and a CI server is no different. Those Jenkins plugins don’t configure themselves. Smalls teams like ours don’t have the resources to commit to managing infrastructure and that is pretty scary when you’re talking about such a crucial aspect of the business.
We’ve recently moved to a hosted continuous integration platform and below I’ve summarised the R&D I did before we made the big move.
I didn’t look at Bamboo again this time round so I don’t have much to say but I have given it a good test drive previously (about 18 months ago). Probably quite surprising that we didn’t give it more of a look since we use JIRA extensively but I wasn’t that impressed with it last time round.
Everyone is using it so TravisCI was my first stop when we started talking about hosted CI solutions. A few clicks and I had Github integration with our repositories and automatic build statuses in pull requests using the Github Status API. The UI is clean and easy to navigate, the way everything automatically updates via AJAX makes the whole experience a pleasure.
The documentation is extensive and easy to navigate and it wasn’t long until I had all of our Simpletest tests up and running. However I was using “drush runserver” as a quick hack which is far from perfect. As I begun to explore different setups for PHP projects I found you could use Apache albeit only with php-fpm, which, probably isn’t an issue to most.
I ran into a few issues the first night with some hanging builds and the support was great. I jumped into their online chat and their staff were fixing my issue within a few minutes.
The main thing missing for me and the reason I continue to explore a few other platforms was the lack of hosted assets and some kind of reporting given standard test output formats like JUnit.
I’d heard a few things about CircleCI, not sure where from, maybe HN? Anyway, I decided to register for an account and I was immediately impressed. Their UI was clean and easy to use, adding projects from Github (or Bitbucket) was a breeze and once again the integration points were solid.
The documentation was also comparable in quality to TravisCI although maybe a little bit on the light side it was probably a little bit easier to navigate. Crawling through the docs I found Circle offered cached dependency directories which massively helps the speed of your build. Looking back after the fact, TravisCI also has this feature.
One thing I really liked about Circle was how easy it was to get SSH access to your builds for debugging. Your Github public key is automatically added to the server when you run with SSH enabled and you login straight in. Little bit annoying that you have to re-run the build to enable the SSH but not so much of a problem for us since our builds aren’t massive anyway.
Hosted assets was probably the feature that got me excited about Circle. It solved a pain point for us (viewing Simpletest output) and I was really happy that it was so easy to implement without messing around sending files to other servers.
Pricing wise, Circle is cheap. I like the pricing structure of paying per container, It makes pricing easy to estimate. When I realised how cheap it was I quickly compared the speed of the builds with TravisCI, nothing to worry they were pretty much identical.
A colleague suggested Codeship so I thought i’d give it a try. Admittedly it was the last platform I tested and I was already pretty happy with both Circle and TravisCI so I really wanted something to jump out at me if it was going to win out. Something did jump out, their not so easy to follow dark theme. To be frank, it really put me off, the rest of my testing was aimless clicking around so I knew enough to justify to myself that I had given it a try.
Codeship works with Bitbucket and they've done extensive work around deployments. They seemed to have support for a magnitude of different deployment platforms from the UI and some great documentation to go with it.
In the end CircleCI was the platform we chose. The hosted assets, SSH access and pricing structure really made it a no brainer for us. A personal email from a founder upon registration was a nice touch, I’m a sucker for personal emails, even if they’re automated.
Moving to a hosted CI server was a great choice for us. Less responsibility, easy to scale and reasonably priced. We get the luxury of using a modern UI (unlike Jenkins) and a feature rich, ever growing platform like Circle. One problem we solved right away was automatic deployments, just one of the limitations we’d found hard to overcome previously with Gitlab.
Originally posted on the Code Drop blog