DevOps is the current novel software development approach, which unifies software development and software operation activities. This brings Continuous Integration (CI) into the foreground, which is an integral element of any DevOps practice. CI is based on the merging of code from all the members of the development team into a shared cloud or machine, where the entire software product is kept integrated at all times. One of the main benefits of CI is that it automates the integration process, which eliminates the disadvantages of manual integration. In particular, CI infrastructures and tools are not confined to gluing code from different developers, but rather automates the build of an integrated product based on the code contributions of the various developers. In this way, a CI process provides up-to-date versions of the integrated product for testing, demonstration and release purposes.
CI has proven benefits in terms of reducing debugging effort, accelerating integration and releases, as well as in terms of increasing developers’ productivity and helping them to focus on innovation rather than on bug fixing. These benefits of CI have given rise to the emergence of several CI tools, which are usually integrated within a DevOps tooling infrastructure. Following paragraphs present five (5) of the most popular CI tools, while at the same time discussing the factors that can drive the selection of the most proper one for a given software project.
Jenkins is one of the most popular CI tools, which is widely used since the very early days of DevOps. It is a cross-platform, open source and Java-based. It comes with a GUI interface in addition to console commands and offers a very flexible plug-ins mechanism, which boosts its extensibility. Jenkins is not confined to CI but supports continuous delivery (CD) as well. The continuous delivery is based on the modeling, orchestration, and visualization of delivery workflows, which are conveniently called pipelines. The pipelines are defined in a domain-specific language (DSL) and contained in special files (“Jenkins files”). The notion of pipelines matches the DevOps concept, as pipelines combine both development and operations related actions. Moreover, through Jenkins, teams can distribute and store pipelines in various (shared) repositories. The tool offers a visual interface, which facilitates management of pipelines and tracking of the progress of their execution.
TeamCity is a tool by JetBrains, which is focused on distributed management of builds, execution, and monitoring of build processes, as well as the flexible integration of changes. It is open source and designed to serve the needs of multiple stakeholders, including developers, engineers, and software project managers. In addition to the (free) open-source version, the tool is available at a scalable licensing fee towards supporting large-scale enterprise projects.
Similar to Jenkins, TeamCity is also Java-based. Its main functionalities include building, checking and running tests on a server, at any time when new changes are committed in the codebase, but also during regular time intervals. This means that TeamCity ensures a clean codebase at all times. It also offers a dashboard that enables stakeholders to monitor progress and changes across all many different projects.
TeamCity supports very complex build grid-like pipelines, which are distributed among various build agents. It provides remote execution features, which allow developers to test their changes prior to committing them i.e. committing only successful builds. Similar to Jenkins, it can be extended to various plugins, including pluggable build programs (e.g., Ant, Maven), pluggable build monitoring and notification services (e.g., Jabber), as well as integration with version control systems.
CircleCI is a CI tool that works closely with software repositories in GitHub or GitHub Enterprise. In particular, the tool provides notification services and alerts for every commit performed in a GitHub project that is associated with it. Notifications contain success or failure information and are provided through webhooks. Moreover, the notifications can be integrated with messaging and collaboration frameworks such as Slack, HipChat, and IRC. CircleCI can be configured to deploy code to various cloud environments, notably Amazon’s environments such as AWS CodeDeploy, AWS EC2 Container Service (ECS) and AWS S3. It can be also integrated with the Google Container Engine (GKE), Heroku and other cloud services.
Apache Gump is the Python-based continuous integration tool of the Apache Software Foundation. It provides support for Apache Ant, Apache Maven, and other build tools. Being tight to the Apache ecosystem, Gump provides some unique features, such as its ability to build and compile software using the latest development versions of the Apache build projects and tools. In this way, Gump is able to automatically identify library inconsistencies, while being immune to changes made to the respective Apache projects. Gump can run on a developer’s machine or DevOps data center. However, the project maintains its own dedicated server, where several Apache projects and their dependencies are built. Gump maintains projects’ definitions and dependencies in a proper in-memory XML object. Hence, project definitions are mapped from XML into in-memory objects for processing.
Bamboo is one more CI tool that supports integrated pipelines comprising automated builds, automated tests, and releases. Specifically, Bamboo supports building, testing and deployment functionalities. In terms of builds, it enables the setup of multi-stage build plans, which can include triggers associated with commits. As far as testing is concerned, Bamboo supports the execution of parallel automated tests that are run whenever there is a code change. It also supports automated deployment workflows, while dealing with aspects such as authorizations and authentication during deployment. Similar to other CI tools, Bamboo can be integrated with collaboration and bug tracking suites like Jira and Bitbucket. It is also extensible based on a rich collection of plugins, which are available in Bamboo’s CI marketplace.
The above list of CI tools, yet non-exhaustive, outlines the main CI functionalities which are currently available to the DevOps teams. While the presented tools feature commonalities in the functionalities that they support, each one of them provides a set of unique selling propositions. Therefore, the task of selecting a CI tool can be particularly challenging. Relevant selections need to take into account both the technical characteristics and the cost of each solution, as well as how it matches the development and deployment requirements at hand. Among the main considerations are the nature of the CI/CD hosting environment (e.g., on-premise, cloud-based, hybrid) that should be supported, the need for integrating with other platforms and tools (e.g., GitHub, GitLab, Docker, Kubernetes), the target functional requirements (e.g., in terms of pipelines and workflows), as well as the community support that each tool provides. These considerations have to be confronted with the capabilities of the various tools while taking into account budgetary considerations. No matter how the selection process works, there is no DevOps without an effective CI tool that meets the development and deployment needs.