Continuous integration has become a vital software engineering practice for today’s agile development teams. By integrating and testing incremental changes to repositories as they are committed, continuous integration tools have significantly increased the speed at which software improvements can be made and deployed — thereby strengthening the quality assurance process as a whole.
What is Continuous Integration?
Continuous integration was conceived as a way to incorporate and test incremental changes to larger code bases automatically. Before the advent of continuous integration, programmers ran the risk of working on a branch of a code project and finding it near impossible to re-integrate it into the code repository that had inevitably undergone changes in the meantime — a scenario called “integration hell.”
In 1997, Kent Beck and Ron Jeffries invented Extreme Programming, a software development methodology that incorporated continuous integration as a means of improving development workflows. Today, continuous integration is now available through open-source or paid tools that are able to be deployed either locally or through hosted services.
The process of continuous integration follows three general steps:
- Developers commit new code to a source-code repository
- A continuous integration server automatically monitors the repository and checks the new code
- The new project build is integrated and any issues are reported
The advantages of using continuous integration tools include the following:
- Daily (or more frequent) improvements to the code base
- Continuous testing and integration of code changes
- Automated diagnostic notifications
- Easier troubleshooting of software defects
What Continuous Integration Tool Should You Use?
Choosing the right continuous integration tool for your development team will depend on a number of factors, including:
- The development environment
- The budget
- The amount of control and customization
- The ease of use
- The level of software configuration management integration
- The intuitive user interface
- Whether a local or cloud-based deployment is preferred
Here are five continuous integration tools from across the spectrum of what is available.
Jenkins is one of the most widely-used free and open-source continuous integration servers. It began as a project of Sun Microsystems that was known as Hudson. Its source code was forked under the new name of Jenkins because of a dispute between its primary developer, Kohsuke Kawaguchi, and Oracle, which purchased Sun and decided to trademark the Hudson name.
Jenkins is a continuous integration server based on Java. Although it is most commonly used to develop Java projects, Jenkins also works with several .NET version control systems, making it well-suited for .NET projects. Jenkins also sports a robust developer community, easy installation, and high customization with more than 400 plugins.
TeamCity is a Java-based continuous integration server that also allows for development on .NET or for mobile platforms. It was created by JetBrains and boasts a user base of more than 30,000 customers.
Like Jenkins, TeamCity runs locally and features a convenient system tray notification tool that alerts you over e-mail of any issues while the build is finishing.
One of TeamCity’s great features is its built-in support for a project hierarchy that allows you to build a project tree that will inherit settings and permissions. You can also craft templates with common settings.
With all this flexibility comes the tendency for project set-up to become lengthy. Teams working on several different projects will often find that setting up build agents can ultimately cut into productivity.
TeamCity is free for twenty build configurations and three build agents. To connect additional build configurations and build agents, users can purchase licenses starting at $299.
Travis CI is a continuous integration solution built to test software projects hosted on GitHub. It was founded in 2011 and launched after a successful 2012 crowdfunding campaign that was sponsored by several technology companies.
It’s free to use for public GitHub repositories, but commercial plans can become expensive starting at $129 per month. Project teams that use GitHub alternatives such as GitLab are, sadly, out of luck because Travis CI only supports projects on the former.
Circle CI is another GitHub-focused continuous integration server hosted on the cloud.
Founded in 2011 and backed by a host of angel investors, its best feature is its simple and sleek GitHub integration. It takes existing code in a developer’s GitHub repository and automatically runs pre-defined tests after which it deploys the new project build.
Pricing varies, with the first virtual container being free and each additional container costing $50. Like Travis CI, Circle’s major drawback is its sole integration with GitHub.
Headquartered in Boston, Massachusetts, Codeship was founded in July 2011 and has undergone three investment rounds. Its strongest features are its project-centric user interface and simple integration with multiple repository hosting services including GitHub, Bitbucket, Deploy Anywhere, and Engine Yard.
Codeship features support for the most widely-used languages such as Java, Ruby, PHP, and Python. Deployment is deceptively simple, essentially consisting of defining a project through their clean user interface and setting a few testing parameters before making the commit. Codeship then tests new code whenever it is pushed and deploys to the server automatically.
The service is free for testing one build with one parallel test pipeline. The price then increases to $83 per month for two builds with two pipelines. Although the interface is easy to use, configuration options are a little on the lighter side.
Developed and released in 2001 by ThoughtWorks, CruiseControl is arguably the oldest continuous integration server in existence. It’s open source, features support for a wide variety of languages, and includes dozens of plugins.
CruiseControl is written in Java and runs locally. It’s geared towards developers who are familiar with the XML syntax, and there is no intuitive user interface for adding build projects. However, CruiseControl maintains a massive and mature user base, and for those with the resources and inclination, documentation and answers are rarely more than a board post away on websites such as Stack Overflow.
Continuous integration solutions provide development teams with greater responsiveness to deal with a constantly shifting and competitive marketplace. Cloud-based continuous integration solutions reduce overhead and allow developers to focus on code while locally-run solutions afford a greater deal of customization and control.
Regardless of what solution your team settles on, you can look forward to greater productivity and a much more streamlined development process.
Hi Ziv – Great write-up on CI! I’d like to add Solano CI into the mix of CI vendors. Solano CI is used by New Relic, Change.org, The Honest Company, and more. Solano CI integrates closely with AWS – CodePipeline, CodeDeploy, etc. I’d be more than happy to tell you more. Feel free to reach me at leo at solanolabs dot com!
Nice Article! I would also like to add that, from experience, it is quite important that the whole team knows the current status of the builds and tests, so that they keep them green at all times.
Desktop notification tools like CatLight, CCTray, CCMenu and BuildNotify are quite useful in this scenario, as they show the build/test status in tray and keep the team on the same page.
Nice article Ziv. CI is a boon for agile development teams. There are so many CI solutions vying for customer attention. From ease of customization point of view, which CI solution did you find the most suitable?
Hey Ziv, this is a great read!
I just wanna ask — have you heard about Semaphore CI — https://semaphoreci.com/ ?
(full disclosure, I’m in the Semaphore team)
Semaphore’s a hosted CI/CD solution, and it’s free for OS projects and 100 private builds per month. It also has a very simple UI, 100+ preinstalled languages and tools, and it’s proven to be the fastest hosted CI solution.
Would love to hear what you think if you decide to try Semaphore out 🙂