Continuous Integration Tools
Together, continuous integration (CI) and continuous delivery (CD) form the CI/CD pipeline, which is the foundation of the modern DevOps environment. This pipeline aims to automate your software delivery process by removing manual actions and enabling teams to iterate quickly. It essentially provides repeatable specifications for the steps that must be performed to deliver a new feature or version of the software product. Understanding CI/CD is crucial for keeping up in today’s software-driven world.
CI forms the first part of the pipeline and is typically required for progressing to CD. It is a software development practice where developers are required to integrate code into a shared repository multiple times per day in the hopes of getting rapid feedback. Once developers commit code changes to the central repository, the CI server builds the system and runs unit tests, then informs the team of its failure or success.
Compared to the waterfall methodology where you create an entire version of the application and then submit it for testing, CI requires the developer to submit only small segments of the application at a time. That way, if a defect is entered into the code base, it can be corrected immediately.
Continuous Integration doesn’t get rid of bugs, but it does make them dramatically easier to find and remove.
Martin Fowler, Chief Scientist, ThoughtWorks
What are Continuous Integration Tools?
CI tools enable developers to merge code into a shared central repository regularly by automating time-consuming tasks and making it easier to back-track to a previous state. The tools automatically build and test the code, keeping it in a perpetually deployable state. Specifically, they perform the code check-in, build process, integration to the mainline application, and testing. The remaining hand-offs from one stage to another in the lifecycle are all manual.
As far as specific tools go, you will want to choose something based on your requirements, workflow, security standards, budget, and existing tech stack. Some tools are easier to setup and learn than others, with communities and support staff that can accelerate adoption, while others are complex but customizable. There are also decisions to be made regarding SaaS vs. self-hosted and open source vs. proprietary. For an example, Jenkins is generally considered to be the best option if you want to run your own server and has a ton of plugins, but its user interface can be unintuitive and overwhelming.
Benefits of Continuous Integration Tools
When using CI tools, the new code segments are built, integrated and tested in mere minutes, providing the developer with immediate feedback on the status of the code and any related issues. This allows teams to find and address bugs quicker, improve software quality, and deliver updates faster. Team members can work independently on different features of the same project with greater visibility, while the tools continually test that everything still works. CI also allows for a constantly available current build that can be used for testing, demos, or releases.
Additionally, hand-offs from one stage to the next are fully automated up to the completion of the testing stage, so developers don't have to run the same monotonous test scripts every day. The pre-release chaos of developers trying to check in their incompatible versions is averted, since the code has already been merged and checked. This improves team morale, reduces stress, and allows developers to spend less time on debugging and more time on adding features.
Ultimately, CI tools provide a predictable way to complete tasks while meeting deadlines, improving the relationship between IT and the business.
Continuous Integration Tools
Bamboo is a continuous integration server that can be used to automate the release management for a software application, creating a continuous delivery pipeline. It has built-in Git Branching workflows and deployment projects, as well as built-in integrations with other Atlassian software.
Bitrise is one of the few mobile CI/CD platforms that work well with iOS. It's easy to use, with a simple workflow system for easy setup and relatively easy configuration. It presents updates and improvements regularly and there are various popular tools that integrate with Bitrise.
Initially launched as a downloadable virtual machine under the name Meat!, Buddy is a web-based and self-hosted continuous integration and delivery tool for Git developers that can be used to build, test and deploy websites and applications. Its features include: Docker layer caching, concurrent pipelines & steps, vCPU and RAM scaling, reusable environments, repository caching, artifacts caching, and changeset-based deployments.
CircleCI is a lightweight cloud-based continuous integration and delivery platform that automates build, test and deployment processes. It supports Ruby on Rails, Sinatra, Node, Python, PHP, Java, and Clojure.
CircleCI has an easily readable YAML configuration, is painless to setup, and does not require a dedicated server to run. It is suitable for small projects that need to get off the ground quickly.
CodeScan’s static code analysis solution helps Salesforce developers save time, increase productivity, code quality and security.
Codeship by CloudBees is a hosted Continuous Delivery platform. It helps to release software quickly, automatically and multiple times a day. It integrates with GitHub and BitBucket, automatically deploying when test pass and notifying you when tests or deployments have failed.
DeployPlace is a transparent deployment tool by developers for developers, with the possibility to easily deploy complex applications, as well as static websites or client-side projects directly from your CI.
Supports Cloud Providers (AWS, DigitalOcean, Azure, Google Cloud) as well as its own set of Internet-enabled hardware as deployment target.
Drone is a simple and open source Continuous Delivery platform that automates testing and release workflows. It is built on Docker and written in Go.
GoCD is an open source software development tool that automates the continuous delivery (CD) of software. Its features include value stream mapping, cloud native deployments, complex workflow modeling, and advanced traceability.
Jenkins is an open source automation server written in Java. It is used to continuously build and test software projects, enabling developers to set up a CI/CD environment. It also supports version control tools like Subversion, Git, Mercurial, and Maven.
Jenkins is well-documented and extremely extensible, with a rich ecosystem of plugins and integrations. For that reason, it excels when used in large projects that require lots of customization.
While Jenkins itself is free, it must be run on a server which will need attention, updates, and maintenance.
LayerCI is a continuous integration and continuous staging platform that leverage memory snapshotting to orchestrate comprehensive test pipelines and provide full-stack staging environments for every branch.
Lokalise is a continuous localization and translation management platform for tech teams. It integrates into any development workflow to help you ship quality localized products, faster.
Semaphore is a hosted continuous integration and deployment platform for both open source and private projects. While open source projects can use Semaphore for free, private projects are limited or must be paid for on a subscription basis. Features of the platform include native Docker support, customizable stages, parallel execution, control flow switches, secrets and dependency management. Compared to other CI tools, Semaphore chooses to focus on performance and is typically faster.
TeamCity by JetBrains is a commercial, Java-based build management, and continuous integration server. Its features include VCS interoperability, build history, code quality tracking and user management. It is known for its ease of setup, out-of-the-box usability, and beautiful user interface.
Travis CI is an open source, hosted continuous integration and delivery service used to build and test GitHub projects. It is virtually identical to CircleCI, but with some minor differences.
Compared to CircleCI, its main advantages are that it can run tests on Linux and Mac at the same time, supports more languages out of the box, and has a build matrix, that allows you to run tests with different versions of languages and packages. In some cases, Travis CI has been criticized for slow provisioning time and instability.