Deploying a .NET 5 website to a Linux-based Azure Web App, using Azure DevOps Pipelines

With Microsoft .NET 5 you can choose what platform you use for developing and hosting the solutions you build. Build on Windows, test on macOS, and host on Linux? No problem!

Why should you run your Web App on Linux?

Because it's cheaper? Because you'll get a faster response time?
Probably, but more importantly: Because you can!

Step 1 - Create your website in Visual Studio

Just choose .NET 5 as the target framework, and you're good to go!

Step 2 - Create the Azure Resource

In the Azure portal, create a Web App, selecting .NET 5 as the runtime and Linux as the operating system.

Step 3 - Set up your build using Azure DevOps Pipelines

I did not get any of the example yml-files provided within Azure DevOps to work, but I ended up with this yml-file building on the latest Ubuntu image.

Create a new pipeline, tell DevOps where your code is, select any pipeline template and replace it with the code below.

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

variables:
  buildConfiguration: 'Release'

steps:
 - task: UseDotNet@2
   inputs:
     packageType: 'sdk'
     version: '5.0.x' 

 - task: DotNetCoreCLI@2
   displayName: Build
   inputs:
     command: build
     projects: '**/*.csproj'
     arguments: '--configuration $(buildConfiguration)'

 - task: DotNetCoreCLI@2
   inputs:
     command: publish
     publishWebProjects: True
     arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
     zipAfterPublish: True

 - task: PublishBuildArtifacts@1
   inputs:
     pathtoPublish: '$(Build.ArtifactStagingDirectory)' 
     artifactName: 'my-super-cool-website'

Step 4 - Set up your deploy Azure DevOps Releases

Deploying is easy! Create a new release pipeline, and select the template called «Azure App Service deployment».

Then make sure you select App type Web App on Linux and select the Web App created in step 2.

That's it! Your .NET 5 website is running on Linux in the cloud!

☁️🐧☁️