Azure is a cloud computing service created by Microsoft for building, testing, deploying, and managing applications and services through Microsoft-managed data centers.
It provides software as a service (SaaS), platform as a service (PaaS), and infrastructure as a service(IaaS). It also supports many different programming languages, tools, and frameworks, including both Microsoft-specific and third-party software and systems.
This article demonstrates how to deploy an application into Azure App Service using Azure DevOps (VSTS) Continuous Integration/Continuous Delivery000000 (CI/CD) pipeline.
Table of contents
- What is Azure app service?
- What is Azure DevOps?
- Step 1 - Creating resource group in Azure
- Step 2 - Creating an app service
- Step 3 - Creating a service principal
- Step 4 - Create a new project in VSTS
- Step 5 - Creating a Continuous Integration (CI) build
- Step 6 - Creating Continuous Delivery (CD) pipeline
- Further reading
To follow along with this article, you need:
- Azure Portal Account, Azure subscription, and Azure DevOps (VSTS) account.
- Azure Resource Group.
- You should also create a web app in Azure and take note of the app’s service URL since you will need it later.
In this article, you’ll create a sample environment to:
- Generate a new build based on code commits to your Azure DevOps repository.
- Automatically deploy your app to Azure.
What is Azure App Service?
From the official product description, the Azure App Service is a fully managed platform for building, deploying, and scaling web apps.
It is a PaaS (Platform as a service) that enables us to quickly deploy our app without worrying about infrastructure and performance.
We can develop software using our favorite language, be it .NET, .NET Core, Java, Ruby, Node.js, PHP, or Python.
Applications can run and scale with ease on both Windows and Linux-based environments. Azure App Service does not only add the power of Microsoft Azure to your application (security, load balancing, autoscaling, and automated management) but also takes advantage of its DevOps capabilities, such as continuous deployment.
What is Azure DevOps?
Azure DevOps is a Software as a service (SaaS) platform from Microsoft that provides an end-to-end DevOps toolchain for developing and deploying software. It has many inbuilt functionalities that allow teams to manage projects and automate workflows.
Some key features in Azure DevOps include creating build and release pipelines for CI/CD automation, project board, organization, and code repository capabilities.
Before we get started, take a look at the architecture diagram shown below. This diagram is probably the simplest form of any client-server architecture suited for smaller projects.
Note that we are using this architecture to demonstrate the deployment of any web application with the minimum configuration.
Step 1 - Creating a Resource Group in Azure
Once you have an Azure subscription, you need to create a
resource group to manage resources. The best practice is to maintain a separate resource group for each environment (DEV, INT, QA, STAG, PERF, PROD) and follow the proper naming conventions.
To create a resource group, select
Resource Group from the left-side window, click on
Add, then select
Name the resource group, and click on
Review + Create. Refer to the image below:
Step 2 - Creating an App Service
All resources from the left side of the panel and click on
Add, then select
Web App and give a proper name to your app service.
Subscription and choose the existing
resource group. Keep the remaining option as default and then click on
Once the app service is created, click on it and navigate to
Overview. There you can select all details that belong to the app service, including status, resource group, subscription, and URL.
Step 3 - Creating the Service Principal
When an application needs access to deploy or configure resources through ARM or VSTS in Azure, you’ll need to create a service principal.
Go to Azure Active Directory -> App registrations -> New application registration, then name the service principle, select application type and give it a URL of your choice.
After creating the app registration, go to
Settings from that service and take note of the app’s ID. Next, navigate to the
Keys section and generate a key and copy the secret value. (Remember to store the key properly.)
Step 4 - Create a new project in VSTS
The first step is to create an account in Azure DevOps (VSTS), then follow the steps below to start application deployment.
We will use a sample open-source Java-based code from GitHub and import it to the Azure DevOps repo. It is a simple multi-module Maven project. This application is an online version of Conway’s
Game of Life.
To create a
new project, click on
Create new project and give a proper
name to your project then select
Next, navigate to the
Repos section, click on
Import, then select
source type. Type in the
URL that you saved earlier in the
Clone URL tab, and select
Import. The source code will be imported into your repository.
We need to allow
service connections in our project. Navigate to the project settings from the bottom of the window in our project’s home directory and then select Service Connections -> New Service connection -> Azure Resource Manager.
Click on the
Use the full version of the service connection dialog from the pop-up, then paste the
Application ID into the
Service principal client ID tab.
Also, add the secret key value into the
Service principal key tab (which you saved during app registration creation) and click
Step 5 - Creating a Continuous Integration (CI) Build
Pipelines -> Build -> New Build Pipeline, then click on
Use the visual designer.
You will be prompted for the source code repo details. Therefore, select
Azure Repos Git and the
Team project that you created earlier. Next, click on Repository -> branch name, then press Continue.
The next step is to choose the
Maven template, type in the pipeline name, and select
Hosted VS2017 as the Agent pool. Finally, click on
pom.xml in the
Maven POM file.
There you can list the goal(s) as
Clean Package and select
Copy Files. At the
contents section, enter
\*_/_.war then navigate to
List the artifact name as
Gameoflife, and keep all remaining options as default values.
Triggers, select Enable Continuous Integration and provide branch filters.
Once a developer commits their changes into master, the CI build will trigger automatically. Refer to the images below:
Once the configuration is complete, click on
Queue on top of the pipeline to trigger a CI build. Each commit into master will trigger a new build.
Step 6 - Creating Continuous Delivery (CD) Pipeline
Navigate to Pipelines -> Releases -> New Release Pipeline, then select the Azure App Service deployment template.
List the stage name as
DEV and click on
Add an artifact. Select project and source (build pipeline), then choose the default version and press
Next, click on
Task (below the DEV), select
Run on agent and select
agent pool as
plus(+) symbol and search for the
template file. You need to rename the file as
ROOT.war and choose the
.war extension from the source directory. These steps are summarized in the images below:
Display name box, add
Azure App Service Deploy. In the
Azure subscription field, you need to select a
service principal name to authorize the resources.
Then choose the
App type and
App Service name. In the
folder selection, select
.war file and rename it
ROOT.war. This is because for Java-based applications we need to deploy the app into a proper directory structure.
Finally, select the
Azure App service template and press on the
Restart option. Ensure that you choose the same subscription and app service name you used in the
Azure app service deploy window.
Save, then on Release -> Create a release -> select artifact build number -> create.
The build will then trigger and deploy into the app service. The code is now successfully deployed into the
Azure App Service.
You can access the Azure app service URL from any browser.
To check whether your code is deployed successfully or not, use this URL
We have successfully deployed our application on Azure using the Azure app service. We have also integrated our repository to the web host with the help of Azure DevOps.
Hopefully, this article gave you some insight on using Azure and make your project deployment faster and simpler.
Peer Review Contributions by: Wanja Mike