How to implement CI/CD in just six weeks
Close

24 August 2021

Automation

Best CI/CD pipeline tools you should know

19 minutes reading

As DevOps practices are spreading across organizations, more and more companies are implementing CI/CD processes. To ensure these processes run smoothly, you need proper tools. Based on our experience, we have prepared a list of the best CI/CD tools that will help you build an effective CI/CD pipeline.

What is CI/CD?

Before we delve into more details, let’s look at what the acronym CI/CD stands for.

Continuous Integration (CI) is about using automation tools to build, test and merge code seamlessly. It ensures that code written by different programmers and belonging to different software components is error-free. Additionally, automated tests allow you to spot bugs at the early stage of the software development process and fix them immediately, thus avoiding quality issues later, when your software has already been released.

Continuous Delivery (CD) is the practice of releasing software in short cycles, with greater speed and frequency. New code is released in smaller batches, even a few times a day. You do not have to wait for a major release in order to correct bugs or add new functionalities. The entire release process is much easier to manage and your code is more bug-resistant.

CD also means Continuous Deployment—the constant and automated production deployment of every change made to the code. In an ideal scenario, every change should be made automatically, without any human intervention.

ci/cd pipeline

Business benefits of CI/CD

CI/CD offers major business benefits:

  • Code quality is improved
  • Time-to-market of new features is shortened
  • Automation reduces overall costs and labor
  • You get instant feedback about your code
  • Communication is streamlined
  • You gather detailed metrics about your application’s performance
  • Customer satisfaction improves

The next section walks you through the tools you’ll need to build your own CI/CD pipeline. 

Cloud-based vs cloud-native application development

You can’t build an efficient CI/CD pipeline without the proper tools, which I’ll get to in a moment. But first, it is important to notice that there are two approaches to app development: cloud-based and cloud-native application development

A cloud-native approach means that an app is designed and created with the aim to be deployed directly in the cloud. Hence apps are packaged in Linux containers and managed by orchestration platforms, like Kubernetes or Docker Swarm

It is true that cloud-based apps are also deployed in the cloud and can be containerized. However, the main difference from cloud-native apps is the approach to the development process. Most typically, we change the architecture of the existing legacy apps to move them to the cloud, where they become cloud-based apps. In fact, a cloud-native approach can be perceived as an additional step forward to better use the benefits and flexibility the cloud offers.

CI/CD pipeline tools

Consequently, there are two types of CI/CD pipeline tools. Cloud-native CI/CD pipeline tools work with software deployed in containers and managed by container orchestrators like Kubernetes or Docker Swarm. Cloud-based CI/CD pipeline tools, on the other hand, are meant for applications deployed in a cloud infrastructure rather than being hosted on local servers or machines.

Among cloud-native CI/CD pipeline tools, we rate these as the best:

  • Tekton
  • Jenkins X
  • GitLab CI/CD
  • GitHub Actions
  • TeamCity Cloud

Cloud-based CI/CD pipeline tools are also offered by three major public clouds providers:

  • AWS CodePipeline
  • Cloud Build from Google Cloud Platform (GCP)
  • Microsoft Azure Pipelines

The next section describes these tools one by one.

Tekton

Originally developed by Google, Tekton is a Kubernetes-native open source framework for creating continuous integration and delivery (CI/CD) systems.

Thanks to using Kubernetes, Tekton allows you to build, test and deploy your software across multiple cloud providers or on-premises systems by creating an abstraction layer with all underlying implementation details. 

It has been gaining in popularity and is used on such platforms as IBM Cloud, OpenShift and VMware Tanzu.

Tekton’s main features include:

  • A set of Custom Resource extensions to Kubernetes that define CI/CD-style pipelines and related concepts.
  • These custom resources are described in yaml source files and stored in a code repository where they can be versioned.
  • You can create and deploy immutable images, manage version control of infrastructure, and perform easier rollbacks.
  • You can leverage advanced deployment patterns like rolling, blue/green, canary deployment, or GitOps workflow.

The main benefits of using Tekton:

  • Since it is Kubernetes-native, you can create cloud-native CI/CD pipelines quickly. 
  • It is Kubernetes-native, but can be used to deploy to any type of environment (Kubernetes cluster, virtual machines, etc.).
  • It offers all the benefits of a cloud-native CI/CD pipeline tool: high availability, centralized logging and monitoring, default self-healing.
  • The pipeline-as-code approach provides the benefits of versioning and source control.

Jenkins X

Jenkins X is a new approach to design from Jenkins—an open-source automation server that automates all sorts of tasks related to building, testing, and deploying software.

Jenkins and Jenkins X have a lot in common: everything you can do with Jenkins X you can do with Jenkins, if you use several plugins and integrations. Jenkins X also uses Tekton as a pipeline engine. The main difference is that Jenkins X was built with a cloud-native approach in mind, so it works better with container orchestration platforms like Kubernetes or Docker Swarm. Additionally, Jenkins X allows you to harness open source tools like Helm, Draft, Monocular, ChartMuseum, Nexus and Docker Registry. As a result, you can build cloud-native applications faster and easier.

Jenkins X main features include:

  • A handy jx command line that allows you to: 

    • install Jenkins X inside an existing Kubernetes cluster,
    • create a new Kubernetes cluster and install Jenkins X into it,
    • import projects,
    • bootstrap new applications.
  • Automatic setup of a CI/CD pipeline.

  • The ability to create different virtual environments for development, staging, and production, etc. using the Kubernetes namespace.

  • The automatic promotion of new versions of applications between these environments following GitOps practices.

  • The ability to create preview environments for each pull request automatically.

The main benefits of using Jenkins X are:

  • Easy to set up thanks to a single line jx command.
  • Provides isolation: every team runs its own instance of Jenkins X either in a shared cluster or in their own separate clusters.
  • Fast to run thanks to powerful commands that expedite most tasks and provide seamless integration with cloud or SCM.
  • Easy and fast to install, as the application code along with all necessary files for containers, packaging, and pipelines are stored in a common repository and are available out of the box.
  • Allows for faster recovery: the configuration as code, of both Jenkins X and your environments, allows developers to get the right context and traceable information to resolve outages faster.

GitLab CI/CD

GitLab CI/CD is a part of GitLab–a suite of tools for managing different aspects of the software development life cycle, including a web-based Git repository manager including features such as issue tracking, analytics, and a wiki.

GitLab’s CI (continuous integration) service builds and tests the software whenever the developer pushes code to the application. On the other hand, thanks to continuous delivery capabilities, GitLab ensures your code can be reliably released at any time. If you want to automate the process and ditch the manual deployment approach, you should aim at continuous deployment.

GitLab CI/CD’s main features include:

  • View, create and manage code and project data through branching tools.
  • Design, develop, and manage code and project data from a single distributed version control system, which enables rapid iteration and delivery.
  • Create a single source of truth for the teams collaborating on software development projects.
  • Perform container scanning, static application security testing (SAST), dynamic application security testing (DAST), and dependency scanning to deliver secure applications whilst ensuring license compliance.

The main benefits of GitLab’s CI/CD are:

  • Provides a complete dev environment.
  • Easy to learn, use and scale.
  • Allows for better build management.
  • Automates build, integration, and verification of source codes to detect bugs before your software goes into production.
  • Helps automate and shorten releases and the delivery of applications.
  • Provides the artifact repositories as packages of different types.
  • Provides container repository.
  • Supports integration with Kubernetes and serverless platforms.
  • Has a built-in issue tracker and wiki.

GitHub Actions

GitHub Actions is an open source tool you can use to automate a CI/CD pipeline. It allows you to build, test and deploy code directly from GitHub. You can base your automation on any GitHub events, including code push or issue creation.

 GitHub Actions features include:

  • Matrix workflows that simultaneously test across multiple operating systems and versions of your runtime.
  • Hosted runners for all major operating systems.
  • Built-in secrets storage and live log reviews. This allows you to store your infrastructure as code without exposing sensitive data, like database usernames and passwords.
  • Support for all common programming languages (e.g. Node.js, Python, Java, Ruby, PHP, Go, Rust, .NET, and more).
  • Hosted runtime environments that are free to use for the first 2000 minutes per month; additional time can be purchased by the minute or in bulk.

The main benefits of GitHub Actions include:

  • Fully integrated with GithHub’s code repository.
  • Starting to work with GitHub Actions is easy, as it provides many templates for all types of CI configurations.
  • You can create your own CI templates and publish them on GitHub Marketplace.
  • You can also test multi-container configurations once you add Docker and composition file support to your workflow.
  • It is free to use with open source repositories; with private ones, you have 2000 minutes free each month.

TeamCity Cloud

TeamCity Cloud by JetBrains is a continuous integration tool that helps you build and deploy different types of project. TeamCity Cloud runs in a Java environment and integrates with Visual Studio and IDEs. 

TeamCity features include:

  • Multiple ways to reuse settings and configurations of the parent project to  subprojects.
  • Run parallel builds simultaneously in different environments.
  • Run history builds, viewing test history reports, pinning, tagging, and adding builds to favorites.
  • Flexible user management, user roles assignment, sorting users into groups, different ways of authenticating users.
  • Support for GitLab and Bitbucket server pull requests.
  • Installation on both Windows and Linux servers.
  • Support for .NET and OpenStack projects.

Benefits of TeamCity Cloud:

  • Can be used in the Software as a Service (SaaS) model without incurring unnecessary upfront costs.
  • No need to manage infrastructure, updates, upgrades and other aspects of the TeamCity installation.
  • Can be installed and run very quickly.
  • Easy to customize, interact with, and extend the server.
  •  A good choice for cloud-native organisations that prefer consumption models.

Now we’ll have a look at the cloud-based CI/CD pipeline tools.

Amazon Web Services (AWS)

As one of the main public cloud providers, AWS offers an entire set of services for configuring your CI/CD process:

  • AWS CodeCommit — a source control service that hosts secure Git-based repositories that allows teams to collaborate on code in a secure and highly scalable environment.
  • AWS CodeBuild — a continuous integration service that compiles source code, runs tests, and produces software packages that are ready to deploy on a dynamically created build server.
  • AWS CodeDeploy — allows you to automate your software deployments to a variety of compute services including Amazon EC2, AWS Fargate, AWS Lambda, or your on-premises servers.
  • AWS CodePipeline — a continuous delivery service that helps you automate your release pipelines for fast and reliable application and infrastructure updates. 

Additionally, you can use other Amazon services like AWS CloudWatch Events, Amazon Simple Storage Service, AWS Key Management Service or third-party tools like Jenkins.

Benefits of AWS:

  • Customize all steps according to your needs using Amazon GUI, console, APIs, AWS SDKs, AWS CloudFormation, AWS CLI.
  • Integrate AWS with other services: AWS CloudWatch Events, Amazon Simple Storage Service, AWS Key Management Service or third-party tools like GitHub, Jenkins, TeamCity, Ghost Inspector, Runscope, BlazeMeter, and XebiaLabs.
  • Set granular user permissions to access and modify your resources with AWS Identity and Access Management (IAM).

Google Cloud Platform (GCP)

GCP offers its own CI/CD pipeline tool—Cloud Build. Its main features include:

  • Support for the vast majority of the most popular programming languages, including Java, Go, and Node.js
  • 15 machine types to choose from and the ability to run hundreds of concurrent builds per pool.
  • Access to cloud-hosted and fully managed CI/CD workflows from private networks.
  • Data stored within a geographical region or specific location to ensure compliance with legal regulations.

Cloud Build benefits include:

  • Scalability: the platform is fully serverless and can be scaled up and down with no need to pre-provision servers.
  • Cost efficiency: pay only for what you use.
  • Flexibility: integrate legacy tools with the build process.
  • Security: scan vulnerabilities as part of your CI/CD and automatically block the deployment of vulnerable images.

Microsoft Azure Pipelines

Azure Pipelines is the CI/CD solution available from Microsoft Azure. It can build and test any language, and deploy to any platform or any cloud.

Azure Pipelines features:

  • Support for any language including Go, Node.js, Python, Java, PHP, Ruby, C/C++, .NET, Android, and iOS apps.
  • Support for hosted agents for Windows, Mac, and Linux apps.
  • Support for any platform including Linux/Windows VMs, Kubernetes, Azure PaaS Services and any cloud, such as AWS or GCP.
  • Configuration of a CI/CD pipeline as code using YAML files.
  • Support for deployment strategies like rolling updates.
  • Access to both traditional virtual machine (VM) managers and more advanced Deployment Groups.

Benefits of Azure Pipelines:

  • Build, test and deploy it on-premise or in any cloud environment.
  • Set any number of stages during the development and testing phases to better detect bugs and understand the root cause of detected issues.
  • For all open source projects, you have access to unlimited build minutes and up to 10 parallel jobs at no cost.
  • If you are using GitHub repos, you can use the Azure Pipeline app to easily set up a CI/CD pipeline.

Final thoughts

As you can see, there are plenty of options to choose from, both open source and paid, when building your own CI/CD pipeline. The right tool will allow you to enjoy all the benefits of building, testing and deploying your software automatically.

If you want to read more about CI/CD - check out our other articles:

Damian

Damian Fedeczko

DevOps Engineer
Dawid

Dawid Trzebiatowski

Senior DevOps Engineer