I am creating a new Azure devops pipeline to deploy to a to Linux app plan and I use YAML scripts for this.
I create a web site with an ARM template and the part of it to create the slot is this YAML calls an ARM template:
- task: AzureResourceGroupDeployment@2
displayName: 'Create APP Service'
inputs:
azureSubscription: '${{ parameters.AzureSub }}'
resourceGroupName: $(Environment.Name)-WebAppResGrp
location: '${{ parameters.Location }}'
csmFile: '$(Pipeline.Workspace)/ARM_Templates/Templates/WebApp.Template.json'
csmParametersFile: '$(Pipeline.Workspace)/ARM_Templates/WebApp.$(Environment.Name).json'
And this is the part of ARM that creates the web app:
{
"apiVersion": "2018-11-01",
"name": "[parameters('webSiteName')]",
"type": "Microsoft.Web/sites",
.....,
"resources": [
{
"condition": "[parameters('slotsEnabled')]",
"type": "slots",
"apiVersion": "2015-08-01",
"name": "staging",
"tags": {
"displayName": "Staging Slot"
},
"location": "[resourceGroup().location]",
"dependsOn": [
"[resourceId('Microsoft.Web/sites', parameters('webSiteName'))]"
],
"properties": {},
"resources": []
}
}
The app is created OK, with staging slot. However, when I try to deploy there from yaml with this code
- task: AzureRmWebAppDeployment@4
displayName: 'Deploy App to Staging slot'
inputs:
azureSubscription: '${{ parameters.AzureSub }}'
WebAppName: '$(Environment.Name)-Lab1'
deployToSlotOrASE: true
ResourceGroupName: $(Environment.Name)-WebAppResGrp
SlotName: staging
packageForLinux: '$(Pipeline.Workspace)/App/source'
enableCustomDeployment: true
TakeAppOfflineFlag: false
RemoveAdditionalFilesFlag: true
ExcludeFilesFromAppDataFlag: false
I have this error:
Could not connect to the remote computer ("<environment name>-<app name>-staging.scm.azurewebsites.net"). On the remote computer, make sure that Web Deploy is installed and that the required process ("Web Management Service") is started. Learn more at: https://go.microsoft.com/fwlink/?LinkId=221672#ERROR_DESTINATION_NOT_REACHABLE.
Error: The remote server returned an error: (404) Not Found.
and when I go to the slot in the Azure portal, its URL is
<environment name>-<app name>-staging.azurewebsites.net - no .scm before ".azurewebsites.net"
I am at a stage where I can fix either deployment slot URL or the url to deploy the code, but I cannot find how to specify either.
I want to avoid specifying unique suffix names. I will do it if I have to, but it will be the last resort.
Why the URLs do not match each other and what way would be the best to fix it?
Edited: I missed a crucial piece of information, the OS the app is deployed is Linux.
I have a Azure Web App created on Linux OS.
When I set the AzureRmWebAppDeployment@4 task with the same configuration like as yours, I can the same ERROR_DESTINATION_NOT_REACHABLE error.
- task: AzureRmWebAppDeployment@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: 'myArmConnection'
WebAppName: 'BriRanApp01'
deployToSlotOrASE: true
ResourceGroupName: 'myResourceGroup'
SlotName: 'staging'
packageForLinux: '$(Build.ArtifactStagingDirectory)/**/*.zip'
enableCustomDeployment: true
TakeAppOfflineFlag: false
RemoveAdditionalFilesFlag: true
ExcludeFilesFromAppDataFlag: false
After I changed the configuration like as below, the error gets fixed.
- task: AzureRmWebAppDeployment@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: 'myArmConnection'
appType: 'webAppLinux'
WebAppName: 'BriRanApp01'
deployToSlotOrASE: true
ResourceGroupName: 'myResourceGroup'
SlotName: 'staging'
packageForLinux: '$(Build.ArtifactStagingDirectory)/**/*.zip'
enableCustomDeployment: true
TakeAppOfflineFlag: false
RemoveAdditionalFilesFlag: true
ExcludeFilesFromAppDataFlag: false
The reason of the error is that if you omit the 'appType' (App Service type) option on the AzureRmWebAppDeployment@4 task, it will apply the default value 'webApp' (Web App on Windows) this is not consistent with the actual app type 'webAppLinux' (Web App on Linux).
So, if the actual app type is not 'webApp', you need to use the 'appType' option to explicitly specify the correct one on the task.