Reading time: 15 minutes
In this post I will explain how to setup continuous deployment of Net Core Web App with Azure DevOps for the app that is hosted with Azure App Service.
What is required
- Azure Subscription
- Net Core Web App
- Repository/Repo on Azure DevOps
Let’s start with initiating a repository on Azure DevOps
Prerequisite: you need a project on Azure DevOps. Go to your Azure DevOps main page.
Once you have clicked Create you should see similar screen.
We are interested in Repos section.
Look at the top section of the page where it says Initialize with README or gitignore. In my opinion it is a good practice to have both of these files with every repository you are creating.
With README you are deemed at some point to add some description of your app. This serves as an initial documentation. Whereas gitignore will prevent you from commiting unnecessary files to your repository. In a production environment this save your builds and time in case one or few files has slipped through.
At the end of the day you can always delete them or edit them according to your requirements.
Next thing is to Clone this newly created repository to your machine.
You can use any GUI for Git to do it or even Git Bash if you prefer command line type of application.
The main thing for us is to memorize the destination where we clone our reposity.
Create Net Core App
Let’s create Net Core web app with Visual Studio.
Since we already created a solution folder when we cloned the repository to our machine make sure in Location field we target the folder that contains the solution folder named NetCoreWebApp. Visual studio clever enough to place web app files into this folder.
Then we select ASP .Net Core 3.1 with Angular template.
The final folder structure should looke like so.
NetCoreWebApp inside has this structure.
Alternatively you can always create web application at one destination and then simply copy or move it over to the repository location.
In either way the result that we aiming for is for Git to track the changes to the repository.
As you can see Sourcetree on top of Git picked up the changes to your repository.
Steps that you need to do next are:
- Good practice is to Build the solution but in this case it can be optional since it’s a pre-made template
- Stage All
- Write commit message
- Push it to the remote server.
Once all of these steps are performed you would be able to see your changes on your repository at Azure DevOps.
Select Pipelines from left menu and Use the classic editor.
Then select the repository you wish to setup the build pipeline.
Then you need to choose ASP.NET Core template.
The next screen should look like this.
The only thing that needs changing is on the Triggers tab.
This way we enable Continuous integration. Which means every time you commit changes to this branch it would trigger the build pipeline. As a result you would be able to see whether your changes integrate into the code of remote copy of the branch. In our case it’s master. Normally you would have build pipeline on develop branch before merging and building it on master branch.
Next step is to click on Save & queue. Then we need to add comment, check the branch and click Save and Run.
Next screen should look like this.
Next we need to create an App Service
For this we need to go to Azure Portal.
There we need to select Create Resource.
Then select Web and Web App.
Things to fill in on the next screen:
- Resource Group -> Create new, choose whatever name you like since by it you will distonguish resource group that is related to particular project.
- Name – which would be part of web app url
- Way of publish – Code
- Runtime stack that your app would use to run
- Operating system – Windows
- Region – whatever you like. Mind since we are using free subscription you need to make sure it is available in that region.
- Windows Plan -> Create new
- Free F1 tier which is part of free subscription from Azure for individual developers that want to research this platform
If you go to your newly created resource and there select App Service. From there you can check the app if it’s ok and running fine by clicking on it’s url.
Let’s go back to Azure DevOps and create Release pipeline.
…before getting into final part I think it’s a good time for a cup of beverage of your choice 😉
Create Release pipeline
Click on Releases from left pane menu. Then click on New pipeline in the area on the right.
Search for Azure app in the search box for templates. Click Apply.
From there you can edit stage details like name and owner. This could be develop stage with one of the testers being the owner. However in our case we will leave these as they are.
We are more interested in editing job/task section. So let’s click on section that is underneath Stage 1 in Stages on the left side.
In here we need to select our Subscription and App service name that we created at Azure portal.
Once we selected and Authorized our subscription we can then see our available App services.
Let’s go back to tab Pipeline and add an Artifact that was created by the build pipeline. Click on Add an artifact.
Select appropriate build pipeline Source. Check alias and edit it if needed. Click Add.
Last bit of setup. The Continuous deployment trigger.
Save and click Create release.
Select the Stage and build version that you want to release.
Once you are happy click Create.
Go to Releases on the left pane. In the right section click on Releases.
You would need to deploy the first release manually. On the next screen click Deploy and off it goes!
You can monitor the process in the next screen.
To check your newly released web app select Deploy Azure App Service.
For this purpose use App Service Application url.
Let’s check out the result! Our Hello, world app! Classic 🙂
Hope you enjoyed this post.
As you have noticed with Azure it is quite straight forward to deploy an app. From creating an App service in portal to creating build pipeline with Azure DevOps. When you have done it once or twice it makes sense. You can easily connect the dots to get the whole picture of modern deployment processes.
Stay tuned and have fun coding.