In part 1 of this series on Continuous Integration Systems, I outlined features of CircleCI and TravisCI. In this post, I will review Codeship and Jenkins, show you a results table comparing all four systems, interpret the results table and declare the overall winner.
To start a project you need to authorize Codeship against Github and then manually write the repository URI, which is very disappointing. Also, you have to write the commands required to build your project in their interface. This is a huge disadvantage because your code will be detached with the build steps. So, if you need to change the NodeJS version, or add one step, you have to do it on Codeship’s interface and not your repository’s code.
Codeship does provide
Cassandra, MongoDB, MySQL, Postgres, RethinkDB, ElasticSearch, Memcached, RabbitMQ, Redis. Some of this requires setup, but others, like Mongo, don’t require any configuration.
The project has to be selected from the top of the page and then you see a list of the latest builds. It shows time ago, commit id and commit message.
Codeship collapses the output of the build by commands similar to how CircleCI does it.
UI/UX Rating: 7.5
- Free for 1 concurrent build
- $49/m for 1 concurrent build, 2 test pipelines
- $99/m for 2 concurrent builds, 2 test pipelines
- $199/m for 3 concurrent builds, 3 test pipelines
Starting from scratch with Jenkins may be the worst option for a development group without sysadmin experience. However, at the same time, it can be a totally viable and desirable option for a group with sysadmin experience. This is due to the ability to customize the service, integrate it with slack or other services, and get better performance over the hosted offerings. It is worth to mention that Jenkins 2.x comes with a wizard that facilitates the setup.
Besides installing Jenkins 2.x, in this case, I also had to install nvm, development tools and libraries (depending on your OS) and a few Jenkins plugins. Once the setup is ready, you have to add a Jenkinsfile to your repository that describes the process to test/build the application.
You have to manually install services you want to use. This has to be considered when setting the specs of your server, because Jenkins requires memory and disk depending on your use, and that adds up with the memory, disk and cpu required by the different services.
Jenkins provides good navigation between builds, but it doesn’t show details like commit message or id in its main window, which I find unfavorable. There are useful things from this window, like showing the trend above the build history listing, or the overview of changes in your repo with the corresponding build.
Jenkins does not support ANSI codes by default, which is very disappointing. There is a plugin you can configure, but this is a feature that should already be part of the base system.
Jenkins’s advantage is that you can customize it to fit your needs, but the default configurations are being evaluated in this case.
UI/UX Rating: 7
For this exercise, a
t2.medium instance in AWS was used.
t2.micro could not support Jenkins and Mongo running on the same host and
t2.medium performed better than the hosted service,s since those offer containers with shared resources.
- $37/m for
t2.mediuminstance in AWS
Gitlabwas initially considered for this comparison, but it was removed due to the complexity to configure additional services like DB.
AWS CodePipelineis not included in this evaluation because it is not a CI tool, but more a CD framework.
There is clear winner in terms of performance due to the fact that all hosted solutions offer containers. The difference is significant considering the price is much lower than the hosted solutions. This is at the cost, of course, of some dedication to configure the service and maintain it internally.
CircleCI is a very good option if you are not concerned about performance, but it is clear that it taxes their servers with more containers per CPU. Besides this, it offers great UI and availability of services.
My personal best (excluding Jenkins) is TravisCI, because it provides a very useful UI and availability of services, but it is also very well documented and used. Also, you can have any number of tests configured and only pay for 2 concurrent.
If you have internal resources that can setup and maintain it, go with Jenkins. If not, check TravisCI first and then CircleCI second.
If you have any questions or would like to see more about continuous integration, please comment below. You can also read this post on GitHub here. Gorilla Logic hires only the best software engineers. Think you have what it takes to become a Gorilla? Check out or careers section by clicking below.