Azure Pipelines vs. GitHub Actions: Key Differences

Max Yermakhanov
ObjectSharp (a Centrilogic Company)
4 min readDec 8, 2020

I am a big fan of Azure Pipelines (and Azure DevOps). Being one for years. Azure Pipelines is a very mature and powerful tool. Azure DevOps/Pipelines was built with the enterprise in mind and it works really well for the enterprise world. It allows you to create workflows that automatically build, test, publish, release, and deploy code to provide end-to-end traceability of the software development lifecycle. And, it’s getting better every 3 weeks as Microsoft continues to add amazing functionality to Azure Pipelines. For more information on Azure DevOps feature timeline, see Azure DevOps Feature Timeline | Microsoft Docs.

Then, out of the blue, Microsoft buys GitHub in 2018 and starts immediately expanding GitHub functionality. Over last two years, there have been so much innovation and improvement in GitHub functionality: advanced security, secret scanning, package management, codespaces, insights, dependabots, projects, innersource management, and of course, GitHub Actions. There is so much awesomeness to cover! But, let’s stay focused on GitHub Actions for now (and, perhaps, cover other items in future posts.) GitHub Actions is an excellent CICD tool to automate your software workflows that is clearly getting a lot of love from Microsoft recently. So, what are the key differences between those two great CICD tools?!? Let’s review.

Azure Pipelines and GitHub Actions are both allow you to create workflows that automatically build, test, publish, release, and deploy code. At the time of writing this post, Azure Pipelines and GitHub Actions share some similarities in workflow configuration:

  • Workflow configuration files are written in YAML and are stored in the code’s repository.
  • Workflows include one or more jobs.
  • Jobs include one or more steps or individual commands. Jobs and steps in Azure Pipelines are very similar to jobs and steps in GitHub Actions.
  • Steps or tasks can be reused and shared with the community.

Now, let’s talk about the key differences between Azure Pipelines and GitHub Actions:

  • GitHub Actions is for GitHub only, while Azure Pipelines can be easily used for other source control systems.
  • GitHub Actions can be used to automate make code reviews, branch management, and issue triaging work the way you want, while Azure Pipelines are primarily used to automate CICD workflows.
  • Azure Pipeline supports environments, deployment groups and agent pools/queues, while in GitHub Actions you can only manage self-hosted runners using groups (which are only available in enterprise accounts)
  • Azure Pipelines supports approvals, gates and checks, while GitHub Actions does not have any of it, which makes it very difficult to use GitHub Actions to orchestrate enterprise releases.
  • Azure Pipelines have service connections and web hooks as a way to orchestrate connections to external and remote services in the pipelines, while GitHub Actions only have web hooks.
  • Azure Pipelines have variables (secret and in clear text) and variable groups to help you manage configurations in your pipelines, while GitHub Actions only has secrets (tied to repo or organization.)
  • Azure Pipelines have Secure Files that allows, GitHub Actions does not. One can argue that those files should be stored in the Azure KeyVault or HashiCorp Vault, and while it is a valid point, the fact remains that Azure Pipelines have that feature and GitHub Actions do not.
  • Azure Pipelines supports stages defined in the YAML file (aka. multi-staged pipelines), which can be used to create deployment workflows. GitHub Actions requires you to separate stages into separate YAML workflow files.
  • In Azure Pipelines, pipeline run name (aka. build number) can be customized (see Run (build) number — Azure Pipelines | Microsoft Docs), while it’s not possible in GitHub Actions.
  • Azure Pipelines self-hosted agents can be selected with capabilities. GitHub Actions self-hosted runners can be selected with labels.
  • Azure Pipelines extensions can bundle multiple tasks, while in GitHub Actions it’s one action within the GitHub repo.
  • GitHub Actions support container based actions, which makes them very flexible. Azure Pipelines extensions can only be authored in Typescript or PowerShell.
  • GitHub has built in code scanning and can integrate with 3rd party security gates, while Azure Pipelines can only integrate with 3rd party security gates.
  • In Azure Pipelines, scripts can be configured to error if any output is sent to stderr. GitHub Actions does not support this configuration.
  • Azure Pipelines allows you to omit some structure in job definitions. For example, if you only have a single job, you don’t need to define the job and only need to define its steps. GitHub Actions requires explicit configuration, and YAML structure cannot be omitted.
  • Syntax of Azure Pipelines and GitHub Actions is a bit different as well:
Syntax differences between Azure Pipelines and GitHub Actions

That’s all I could think of (for now.) As you can see there are quite a few differences between Azure Pipelines and GitHub Actions at the moment. While GitHub Actions is quickly catching up with Azure Pipelines, it is still has some work to do. Source code management and security tools are clearly better in GitHub, but release orchestration part of CICD workflow is clearly more mature in Azure Pipelines. At least for now, until GitHub Actions improves that part of its CICD offerings. As a user you can take advantage of both of those tools right now as they integrate really well together.

Hope this helps.

#DevOpsGuy

--

--