Upgrade of .NET agent for Azure Pipelines

Bohdan Janousek

We are upgrading the .NET used by Azure Pipelines agent from current .NET Core 3.1 to .NET 6. This is to support new Apple silicon hardware as well as newer operating systems such as Ubuntu 22.04, or Windows on ARM64. Another reason for the .NET upgrade is the fact the .NET Core 3.1 version is already in maintenance phase and the support ends on December 13th, 2022. This means there will be no patches after this date. See .NET and .NET Core official support policy (microsoft.com) and .NET Core 3.1 reaching end of support on December 13th, 2022 for more details. We do not want our customers to build and release their applications on unsupported frameworks.

If you are running self-hosted agents on newer operating systems that are already supported by .NET 6, this update will be seamless for you. Unfortunately, not all operating systems supported by .NET Core 3.1 are supported by .NET 6. The following operating systems are not supported by .NET 6 and hence cannot be used to run the new (.NET 6 based) Azure Pipelines agent. This is not a complete list.

System/Distribution Version not supported by .NET 6
CentOS < 7
Debian <= 4.9
Fedora <= 32
RedHat EL <= 6
Ubuntu <= 19
MacOS < 10.15

If you use on one of the above operating systems to run self-hosted agents, you must update your agent machines to a newer operating system to prevent pipelines from failing. To provide you the best support we’re planning to roll out the .NET 6 Azure Pipelines agent in the following phases:

Phase I – Preview

We have already made a prerelease version of .NET 6 agent available to all customers. In other words, we are now shipping a .NET Core 3.1 version (agent versions 2.x) as well as a .NET 6 version of the agent (agent versions 3.x) every few weeks. This is to let you download and test the new agent in your pipelines and to give us feedback. To use the new agent, set up a separate agent pool following the instructions here. Download the latest .NET 6 agent from our GitHub releases page.

Phase II – General availability for Microsoft-hosted pools

Starting mid-December, we will update all the Microsoft-hosted agents to use the .NET 6 agent. Your pipelines should continue to work without any changes. In case of any issue contact support.

Phase III – General availability for self-hosted pools

In this phase, we will stop updating the .NET Core 3.1 agent. We will only update the .NET 6 agent. The exact date when that will be done will be communicated. The current plan is to do that towards the end of Q1 2023. In general, our expectation is that you will update your agent machines to newer OSes by this time. We will help you with this transition before we make this change by:

  • Adding warnings to pipeline runs when you use an OS that is not supported by .NET 6. Note that these warnings will only be visible if you get our agent updates regularly. So, you may not see these warnings in all cases.
  • Adding a banner to your Azure DevOps experience to remind you to upgrade your agent machines.
  • Providing a mechanism to prevent auto-upgrading of the agent from 2.x version to 3.x version if you use an OS that is not supported by .NET 6. Look out for a follow-up blog with instructions.

FAQ

Q: What is the difference between the 2.x and 3.x agents?
A: The 2.x agents (e.g., 2.212) are .NET Core 3.1 and the 3.x agents (e.g., 3.212) are .NET 6. During Phase I and II, we will have both versions simultaneously with the 3.x versions being in prerelease.

Q: How will security issues in the agent be patched going forward?
A: When the .NET 6 agent becomes generally available for self-hosted pools in Q1 2023, there will be no patches done, in general, for the 2.x agents. The patches will be done only for the 3.x agents. However, we also have Azure DevOps Server customers that will still be relying on 2.x agents. So, we will review the security issues on a case by case basis to decide.

Q: What do I need to do when I’m on an unsupported OS?
A: You should migrate to a newer operating system that is supported by .NET 6 now. Otherwise, your agent may attempt to upgrade, and it will fail as .NET 6 cannot be installed on your OS. We will publish some guidance in a follow-up blog post that will prevent auto-upgrades of the agent. However, that is only meant to be a temporary solution to give you some more time to upgrade your agent machines.

Q: Can I stay forever on 2.x agents if I am not working on any changes in the project anymore.
A: No. We are regularly adding new features to Pipelines and some of them may require an update to the agent even though your pipeline does not explicitly depend on that feature. When you prevent auto-upgrades of the agent using the guidance in a follow-up blog, that agent cannot be used to schedule the pipeline. If no agent with the required capabilities can be found, the pipeline execution will fail.

Q: I use Azure DevOps Server and not Azure DevOps Service. Does this change impact me?
A: No. The new agent is only applicable for Azure DevOps Service customers at this time. However, a future version of Azure DevOps Server (2022.1) will include the new agent. So, it is recommended that you update your agent machines to newer OSes that are supported by .NET 6 starting now, if you plan to keep up with the Azure DevOps Server releases in the future.