Table of Contents |
---|
Objective
You have a working Azure Java web application and the source code is managed in a Git repository. The goal of the tutorial is to automate the deployment of a Java web application to the Azure WebApp. This automation will include:
...
We will walk through each of the FlexDeploy features that will be created/configured to accomplish this goal and have the Java web application deployed in a very short amount of time.
Checklist
Checklist | Description |
---|---|
Azure Tenant Id | Azure Tenant Id for the company |
Azure Subscription Id | Azure Subscription where the WebApp App exists |
Azure Client ID | Client ID to connect to desired Azure Subscription |
Azure Client Key | Password for the Client ID |
Azure Client ID permission | The Client ID must have relevant access in target WebApp App to deploy code |
Azure Web App | The WebApp App with relevant runtime should already be created |
Azure Resource Group | The Resource Group containing the WebApp App |
Azure CLI installation | Azure CLI needs to be installed where the plugin operation shall run (FlexDeploy server) |
Azure CLI in class path | Azure CLI should be added to class path on the FlexDeploy Server. Else the path can also be set under FlexDeploy environment level property |
Configure
...
Cloud Account
First, an Azureaccount needs to be configured under Topology. FlexDeploy will connect to the right Azure Subscription with provided details and do the deployment.
...
It should have a Client ID, Client Key, Tenant Id, and Subscription Id configured in it. The Client ID must have relevant access in the target WebApp to deploy code and make other associated changes(Application Setting update etc).
...
Client Key is a password field and hence needs to be kept hidden. To update the same click on the pencil icon as shown below
Update the Client Key value under Secret Text. This is to make sure no one else can retrieve the password
...
Git repository structure
...
Git Repository Structure
The Git repository should contain the codebase. Alongside it can also contain any Application Setting and Connection String-related attributes in respective files(any naming convention allowed). These files are not mandatory, however, in case someone has any Application Setting and Connection String property to update this is recommended. Please review the Application Setting and Connection String property update for a detailed explanation.
The Sample Git repository structure is given below.
...
Build and Deploy Workflows
Navigate to the Workflows tab and create a build and a deploy workflow using the “+”(Click to create new Workflow) button as highlighted below.
...
Next, create one Build and Deploy workflow as shown below. The workflow Type field defines the type of workflow.
Build Workflow
Navigate to the Workflows
Select the “+” button from the left-hand pane to create a new workflow with type as Build.
...
Deploy Workflow
navigate to the Workflows
Select the “+” button from the left-hand pane to create a new workflow with type as Deploy.
...
The Workflow Group and Subgroup define the folder hierarchy. Once both workflows are created it should look like the below. No constraint on workflow or folder naming convention.
...
The steps of the workflow execution can be configured through the Workflow Definition section.
...
button as highlighted below.
...
Build Workflow
Below given is a sample build workflow to build a Java executable(war file) and create an artifact from it.
...
Note: the deployWebApp operation(Azure plugin) will search for the Application Setting and Connection String file name provided as part of Project properties. Irrespective of folder structure it will find the file. In case more than one file exists with the same name, flow shall the workflow will fail.
Deploy Workflow
Below given is a sample deployment workflow to deploy the archive to Azure Web App.
...
First, navigate to the Workflow Definition tab and click on open the Create/View Inputs button as shown below.
...
Inputs popup. Create two input variables, one each for Application Setting and Connection String as shown below.
...
The deployWebApp operation returns four output variables. To capture them and use them for further processing/evaluation, one can create four variables and map them against the output parameters of the deployWebApp operation. Return As Output drop down option should be set as Yeschecked.
First, navigate to the Workflow Definition tab and click on open theX2 Variables buttonpopup
Next use Create option to add four output variables.
...
Map the variables against the output of the deployWebApp operation to capture the responses.
...
Project
...
Configuration
Navigate to the Project tab and create a Project with a logical name (JavaAzureWebApp in this case)
...
Configure the Build and Deploy workflow that has been created in previous steps as shown below.
...
Anchor | ||||
---|---|---|---|---|
|
Configure the Source SCM repository under Source Control as shown below.
...
For detailed steps of Source Control configuration please refer to Configure Source Control in FlexDeploy
Project Properties
...
To configure Project specific settings one can navigate to the Project Configuration tab as shown above.
Next, select the PROPERTIES option from the left-hand pane.
To deploy a WebApp to Azure Web App, the first two mandatory properties are the WebApp App Name and Resource Group Name. These need to be configured under Project properties.
Remote Build: This flag is applicable in case we want to upload the code to the Azure Web App backend and build it there itself (e.g.: .NET/Node.js). We are creating the Java executable(war) file explicitly as part of the build workflow, hence this checkbox can be left unchecked for this flow.
Under Project properties, one also needs to provide the Application Setting/Connection String file names(if applicable).
Show deployment log: Once deployment is completed, in case someone wants to verify the execution steps, they need to check the below checkbox under Project properties.
In this case, the plugin will internally retrieve the deployment Id and will fetch the Deployment log(if available), and return the same as an Output variable.
This is applicable only for Code archive deployment(not for docker image deployment.)
Anchor | ||||
---|---|---|---|---|
|
These Application Setting/Connection String properties are non-mandatory and can be directly provided as plugin Input as well. Or even may not be passed at all. However this is the recommended way and the files should exist in the working directory(TEMP) during execution(folder hierarchy is not required, the plugin will search the file based on the file name).
...
There could also be scenarios where someone only need to update the Application Setting or Connection String without actually deploying the code. In that case one can use upsertWebAppApplicationSetting or upsertWebAppConnectionString operations respectively. The workflow execution will be exactly same only the code archive creation /Docker image update step will not be required. Build workflow generated artifact should only container AppSetting.json or ConnString.json. These values can also be passed as input as already mentioned in detail in above section.
Target Properties
Select Topology from the menu and then select Topology Overview from the left menu. You will see a table that has Instances as the rows and Environments as the columns with colored circles representing the Environment Instance. Color coding represents:
...
Selecting the GREEN circle for DEV will display the configurable properties/Endpoint and allows for the configuration of
Properties | Mandatory Field | Description |
---|---|---|
WebApp Slot Name |
| Target slot for deployment |
Target Slot to swap | Optional | In case slot swap is required |
Azure Cloud Account |
| Azure account with relevant details |
Absolute path of Azure CLI | Optional | Not required if Azure CLI already added to workflow execution m/c class path |
GIT Path | Optional | Path to the Git executable. Required only if git is not on class path. |
Below given are the environment-specific values which need to be updated.
...
The Azure Could account needs to be set here from the drop-down. It will show all Cloud Accounts configured under Topology, which we have already mentioned earlier.
...
Anchor | ||||
---|---|---|---|---|
|
Azure Web App default slot is production. However, one can configure multiple slots and deploy web application on those slots inside WebApp App. WebApp Slot Name is a mandatory field, where the code needs to deploy.
...
executeWebAppAppSlotSwap operation can be used to perform the slot swap.
Post deployment debugging
Post deployment success of plugin execution it can take a little while for the web application up and running.
...
In case of failure we can easily debug the issue from log.
Build Execution
For detailed steps on how to initiate Build Azure WebApp, review artifacts, and ultimately deploy to Azure Web App please refer to Build and deploy execution through FlexDeploy
...