Which CI/CD Tools Will You Use in 2020? 
Tags: devops
Published: 2020-07-08 10:11:32

DevOps teams rely on great tools to support the fast-paced development that comes with Continuous Integration / Continuous Delivery (CI/CD). You and your team can use tooling to work more efficiently and effectively. Ideally, tools integrate smoothly with all aspects of your workflows and can be used intuitively. Unfortunately, many tools do not live up to this standard. 

Tools can make your work more difficult rather than less, if you do not choose carefully. Adopting the wrong tools can also saddle you with technical debt and little return on your investment. It’s important to choose wisely so you don’t end up with tools that you’ll come to regret. 

In this article, you’ll learn some considerations for choosing the right tools. You’ll also be introduced to four tools you can use to improve your [CI/CD pipelines](https://resources.whitesourcesoftware.com/blog-whitesource/devops-pipeline).

## What Is CI/CD?
CI/CD is a set of tools and processes you use for code development and release. DevOps teams use CI/CD to automate routine and repetitive tasks and to maximize efficiency. CI/CD enables DevOps teams to quickly and consistently release functional, high-quality software.
Continuous Integration (CI) is the process of adding new code features to an existing base code. New code is tested for compatibility before being combined permanently to ensure viability. Continuous Delivery (CD) is the process of making code constantly available for deployment. Code is frequently compiled and ready to be quickly packaged on short notice.

CI/CD is accomplished using pipelines or series of tools and processes. Pipelines can include stand-alone tools, individual scripts, or packaged solutions. 

## How to Choose CI/CD Tools
New tools are being developed for CI/CD on a steady basis. The number of choices available can make it difficult to choose the right tools for you out of the available options. The following considerations can help you narrow down your choices.

**Hosting Requirements**
When choosing your CI/CD tools, you should first determine what kind of hosting you need. Tools can be cloud-hosted, either public or private, or self-hosted. 

You can rely on cloud-hosted tools to handle infrastructure, security, maintenance, and support. However, these tools require you to grant access to your sensitive information. This access prevents you from retaining full control over your data and can present a security risk.

On-premise tools enable you to have complete control over data and processes and are potentially more customizable. However, you must handle hosting, updating and security yourself.

**Budget**
Budget is often a deciding factor in the tools that are available to you. Many tools offer a variety of versions that enable you to use a different number of resources, according to your needs. Additionally, many tools offer free or discounted versions for open-source projects.

To figure out a realistic budget, you need to take into account:
* The number and frequency of iterations you’re releasing
* The number of concurrent builds and timing expectations for builds
* The number of users and environments
* Your data retention requirements 

Open-source tools can help you maintain a lower budget, but still require resources to operate and maintain. Open source tools have no official support or service level guarantees. That means you must devote resources to troubleshooting and updating on your own. Alternatively, you could contract a third-party to manage tools for you but this incurs external costs.

**Features**
Evaluating the features of any tool you’re considering is vital. Choosing tools hastily can create issues related to vendor lock-in and technical debt. 

You want to maximize features in the fewest tools possible to reduce pipeline complexity and maintenance. Scaling, automation, and customizability are key aspects. Tools also need to support any languages and environments you and your software are using.

Other core features to look for include:
* Docker and Kubernetes support
* Easy integration with cloud providers
* A package repository
* Built-in testing solutions, including automation features
* Metrics collection and reporting
* Real-time monitoring and logging, with alert functionality
* Concurrent processing for testing and builds
* Secrets management
* SSH support 

**Community Support**
Choosing tools with strong community support and adoption is important for both open-source and proprietary tools. Greater adoption and support foster better documentation and security, and more frequent feature releases. 

Strong community support can help ensure that you do not invest in tooling that will soon be deprecated or abandoned. Tools with strong support are also more likely to be supported as integrations with other tools. Out-of-the-box integration can mean less maintenance and better centralization of tooling.

## Tools to Consider for 2020
In the coming year, consider checking out the following tools. These tools can provide you with new functionality or simply enable you to replace existing tooling. 

**GitHub Actions**
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/lj820uaydhf359cfdnyo.JPG)
[GitHub Actions](https://github.com/features/actions) are a recently released open-source tooling feature you can use to automate workflows. It enables you to build, test, and deploy code directly from GitHub. You can base your automation on any GitHub events, including push or issue creation. 

GitHub actions include features for matrix workflows, hosted runners for all major operating systems, built-in secrets storage, and live log reviews. It supports all common programming languages. 

GitHub actions includes hosted runtime environments that are free to use for the first 2000 minutes of use per month. If you need more time for testing you can purchase time by the minute or in bulk. You can use GitHub actions by including them in your YAML files.

**Gradle**
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/3gnox0wig0rsv3m49ewi.JPG)
[Gradle](https://gradle.org/) is an open-source build automation tool that has been around for around a decade. It continues to be well adopted and supported. Although it is not a new tool, it can be a good alternative if you’re looking to replace Maven as your build management solution. Gradle is more extensible and faster than Maven and can be used for native development of C/C++ applications.

Gradle includes features for incremental builds, build caching, and parallel execution. It supports a variety of languages and platforms, including Java, Scala, Android, and C/C++. You can integrate Gradle with a range of tools, including Eclipse, IntelliJ, and Jenkins. 

You can use Gradle on-premises or with a virtual machine in the cloud. Gradle is free to use. However, if you want enterprise support or training you need to pay an additional fee.

**Semaphore**
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/5munah6elyk0r36sfcbr.JPG)
[Semaphore](https://semaphoreci.com/) is a service that enables you to run your build, and test and deploy pipelines on hosted servers. You upload your code and your pipeline is run in an isolated, clean environment. You can access your Semaphore pipelines via SSH.

Semaphore includes features for parallel execution, secrets and dependency management, and control flow switches. It integrates with GitHub, Docker, Kubernetes, Android, and iOS. It also includes support for all major cloud providers.

Semaphore is free for the first 1,300 service minutes you use each month. After that, you pay only when actively using the service on a price per second basis. The cost is determined by the combination of machine and resources you choose to use. Both Linux and macOS machines are available.

**Team City**
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/l9xh756qucfzw19fuwtc.JPG)
[Team City](https://www.jetbrains.com/teamcity/) is a build management and CI server. It has been around since 2018 and has wide adoption. Team City is a good alternative for Jenkins, especially if your team is already using JetBrains products. The most recent release of Team City added features for automated clean-up, metrics exposed via HTTP endpoint, multi-node setup, AWS EC2 launch templates, scripted build processes, and Git patches.

Team City supports a range of integrations, including Docker, Jira, Maven, and GitHub. It is available in a basic version free with paid upgrades and an enterprise version. 

You can use Team City in the cloud or on-premises. It is free to use for the first 100 build configurations and 3 build agents. Additional configurations and build agents can be purchased for a fee.

**Bitrise**
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/7zgq32k6x1wml12fo236.JPG)
[Bitrise](https://www.bitrise.io/) is a Software as a Service (SaaS) tool for CI/CD with mobile applications. It supports development on a range of platforms, including IOS, Android, React Native, and Ionic. 
You can use it with GitHub, GitLab, and BitBucket. 

Bitrise includes features for debugging from the terminal, chaining workflows, automatic code signing, and smart data caching. It integrates with over 180 tools, including Jira and Slack. 

You can only use Bitrise as a hosted service. The free version includes one concurrency and 10 minutes of time for each build. You can perform 200 builds a month. If you need more resources, you can pay a monthly subscription fee. Subscriptions are available on a variety of organization and enterprise levels.

## Conclusion
A 2019 survey found that [78% of teams](https://thenewstack.io/measuring-ci-cd-adoption-rates-is-a-problem/) polled had adopted or were planning to adopt CI. The adoption of CD was a bit behind at around 68%. Demand for CI/CD tools and solutions is growing. 

As products are refined and new competitors arrive, DevOps teams will surely benefit. Hopefully, this article provided you some tips for choosing the best CI/CD tools for you. Apply these tips to the tools introduced here to see if they can help you improve your pipelines.