Each major public cloud provider offers its own native CI/CD pipeline tools. And while each of these tools has...
its relative strengths and weaknesses, they all aim to lower the barrier to entry for CI/CD initiatives.
Native pipeline tools offer only a fraction of the features that major cloud providers offer, so their functionality can feel limited. Third-party CI/CD providers, on the other hand, focus solely on those products. Features and functionality make up a portion of the tradeoffs between a native vs. third-party option.
One of the biggest advantages of native CI/CD pipeline tools -- such Google Cloud Build, Azure Pipelines and AWS CodePipeline -- is that they integrate directly with the underlying cloud infrastructure. This means developers can test, build and deploy apps within the same hosting service, which helps ensure consistency across testing and delivery pipelines.
Let's take a closer look at these three cloud-native CI/CD pipeline tools.
Google Cloud Build
Google Cloud Build, the native CI/CD option for Google Cloud Platform (GCP) users, is a Docker-first tool.
It offers native support for some programming languages and build steps, but its true power comes from its support of Docker-based build steps. For example, rather than tell Cloud Build to build and test PHP code using the PHP Builder, developers can build a production-ready Docker image and run tests directly on it. Because of the growing ubiquity of Docker containers, the ability to define and execute a build process from within the context of a Docker image drastically reduces the tool complexity for first-time users.
The following build step executes the npm install command from within the official node image found on Docker Hub:
- name: node:10.10.0
Because of its Docker-backed workflow, developers can deploy build artifacts in Cloud Build anywhere those artifacts can be delivered. While Google primarily focuses on GCP deployments in its documentation, a developer could use native command-line workflows to deploy to other cloud platforms. To cite an example from a Google tutorial, deploying an artifact to a Kubernetes cluster requires developers to update the deployment resource, using the standard kubectl command, as shown below:
- name: 'gcr.io/cloud-builders/kubectl'
The ability to integrate third-party tools with Google Cloud Build depends on a developer's skills with Docker. For example, developers can post build updates to their company's Slack channel or mark deployments in New Relic through API calls from within a properly provisioned Docker image. For more detailed integrations, such as building GitHub pull requests, developers can enable an official Google Cloud Build app from within GitHub. This allows builds to trigger every time a new branch is pushed or a new pull request is created within GitHub.
Azure Pipelines is the native CI/CD pipeline tool from Microsoft. This cross-platform, extensible, cloud-agnostic tool offers native support for a number of popular technologies, specifically open source projects. It's backed by a large extension library and is a good choice for multi-cloud applications.
Unlike Google Cloud Build, Azure Pipelines natively supports builds and tests within several languages and technologies, including Node.js, Python, Java, PHP, Ruby, C/C++, .NET, Android and iOS apps. It works with Linux, Windows and macOS targets. If it does not natively support a technology, Azure Pipelines follows a similar pattern as Cloud Build and relies on Docker containers for more targeted build and test workflows.
Native builds are handled via Microsoft hosted-agents, which provide a pool of five VMs on which developers can build an app. At the time of publication, this list consisted of Ubuntu 16.04, Visual Studio 2017 on Windows Server 2016, macOS 10.13, Windows Server 1803 and Visual Studio 2015 on Windows Server 2012R2.
Azure Pipelines can deliver code to other destinations within the Azure ecosystem and natively supports deployments to any cloud provider, including GCP and AWS. The tool uses a delivery method for external Kubernetes deployments that's similar to what's used in Google Cloud Build. And it has a large third-party extension library that offers deployments directly to any AWS utility, including Elastic Beanstalk and Elastic Compute Cloud.
With a library of nearly 600 integrations, Azure Pipelines has solid support for third-party integrations. If you need to integrate a service, such as Slack or SonarQube, with your native CI/CD tools, Azure Pipelines can handle it. In addition to the native GitHub integration features found with Google Cloud Build, you can use other features, like Slack notifications, and code analysis with a single click. If an integration doesn't exist, developers can create custom extensions to match a specific project.
AWS CodePipeline is the CI/CD pipeline tool from Amazon. This front-end-driven tool ties together other AWS development services, such as CodeBuild and CodeCommit, into one cohesive process.
Developers can use Amazon CodeBuild to power a CodePipeline build process or they can choose other options, such as Jenkins. In addition, they can develop custom actions for more targeted build and test steps.
What sets CodePipeline apart from the other platforms on this list is that it emphasizes the "pipeline" part of CI/CD pipeline tools. Rather than offer native support for specific technologies, it acts as the glue between more defined steps in a build-and-deployment process.
Out of the box, CodePipeline offers AWS-only deployments, such as CloudFormation, CodeDeploy, Elastic Container Service and Elastic Beanstalk. While these destinations offer a great deal of functionality, they are limited to the AWS ecosystem, which isn't ideal for multi-cloud environments.
For Kubernetes- or Docker-powered applications, developers can write a custom deployment action that interacts with necessary APIs in a similar manner to Google Cloud Build and Azure Pipelines.
Unlike Azure Pipelines, the list of integrations for CodePipeline is minimal, with GitHub being the most prominent. By using GitHub Webhooks, CodePipeline builds can be triggered for new pull requests. Developers can work out more advanced integrations using custom actions and executable Lambda functions.