Web Job Deployment Via Release Management

Introduction

 
This article assumes that we are using TFS 2017 RTM or lower version. In higher versions, we can directly tokenize and deploy the web job using the inbuilt task.
 
Web Job deployment is not as straightforward as App Service deployment or Service Fabric. This is because there is no out of box deployment available task available in Release Management. So, below are the steps you need to take to do end to end deployment.
 
STEP 1 Creation of Packages using Build Definition
 
Package creation using BuildDefinition is the first step in the process to deploy a web job. Below Screenshot describes the build definition step. The thing to note here is "MSBuild Arguments", which is responsible for the creation of packages.
 
Value for Build Definition should be,
 
"/p:DeployOnBuild=true /p:WebPublishMethod=Package
 
/p:PackageLocation=$(build.artifactstagingdirectory)\WebJob
 
/p:OutputPath="$(Build.BinariesDirectory)\$(BuildConfiguration)\WebJob/" 
 
index
 
Once the package is created using the above step, you can save the artifacts to the server using the "Copy and Publish Artifacts" task to be available in Release Definition.
  
STEP 2 Deploy using Release Definition
 
Once the package is available in Release Definition, there are two steps involved to deploy a web job,
  • Tokenize the Web Job
  • Deploy the Web Job
Let's see them one by one below,
 
Tokenize the Web Job
 
Tokenization of web jobs is nothing but to change the AppSetting values with the environment-specific values. To do so, you can use Replace token task to do so. Below is the screenshot of it. This will take the source path you have the zipped folder and then use Regex operation, will search and replace your token values. (Note: Make sure you unzip the package folder and provide it to this task to do tokenization. After tokenization again zip it and do a web deploy) 
 
index1
 
Deploy the Web Job
 
Once tokenization is complete, deployment of Web Job can be done using the task "Azure RM Web App Deployment". In this step, you can give the package folder path, which was tokenized in the step above. Also, notice that web job is deployed under an App Service, so you need to provide the web app name under which you want to deploy your web job.
index2
 
Once all the above step executes successfully, you can see the deployed web job in the portal under the Web App.
 
To check tokenized values, you need to browse through kudu service and check the deployed web job config (Since its a web job, the config will be in the type "webjobname.exe.config".