I have made an Azure DevOps YAML Pipeline which successfully deploys into our testing env; I have copied that pipeline changed the App Name for our Staging Env and the Pipeline fails and gives out this error:
##[error]Failed to deploy web package to App Service.
##[error]To debug further please check Kudu stack trace URL : https://$nsclassroom-vxh3zokbtum5i:***@nsclassroom-vxh3zokbtum5i.scm.azurewebsites.net/api/vfs/LogFiles/kudu/trace
##[error]Error: Package deployment using ZIP Deploy failed. Refer logs for more details.
Here is the YAML File for that Pipeline:
variables:
System.Debug: false
azureSubscription: 'WebsitePipelineJC'
RG: 'MY VALUE'
Location: UK South
containername: 'private'
appconnectionname: 'WebsitePipelineJC'
stages:
- stage: Deploy
jobs:
- job: job1
displayName: Create And Publish Artifact
pool:
vmImage: vs2017-win2016
steps:
- task: UseDotNet@2
displayName: Use .Net Core 3.1.x SDK
inputs:
packageType: 'sdk'
version: '3.1.x'
- task: DotNetCoreCLI@2
displayName: dotnet restore
inputs:
command: restore
projects: 'Website.csproj'
- task: Npm@1
displayName: 'npm install'
inputs:
workingDir: ClientApp
verbose: false
- task: Npm@1
displayName: 'npm run build'
inputs:
command: 'custom'
workingDir: ClientApp
customCommand: 'build'
- task: DotNetCoreCLI@2
displayName: dotnet build
inputs:
projects: 'Website.csproj'
arguments: '--configuration Release'
- task: DotNetCoreCLI@2
displayName: dotnet Test
inputs:
command: test
projects: 'UnitTests/UnitTests.csproj'
arguments: '--configuration Release'
- task: DotNetCoreCLI@2
displayName: dotnet publish
inputs:
command: publish
projects: 'Website.csproj'
arguments: '--configuration Release --output
$(Build.ArtifactStagingDirectory)'
zipAfterPublish: true
modifyOutputPath: false
- task: PublishPipelineArtifact@1
displayName: Publish Pipeline Artifact
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)'
artifact: 'Website'
publishLocation: 'pipeline'
- job: job2
displayName: Create Web App
dependsOn: job1
steps:
# Download Artifact File
- download: none
- task: DownloadPipelineArtifact@2
displayName: 'Download Build Artifacts'
inputs:
patterns: '**/*.zip'
path: '$(Build.ArtifactStagingDirectory)'
# deploy to Azure Web App
- task: AzureWebApp@1
displayName: 'Azure Web App Deploy: nsclassroom-dgyn27h2dfoyo'
inputs:
package: $(Build.ArtifactStagingDirectory)/**/*.zip
azureSubscription: $(azureSubscription)
ConnectedServiceName: $(appconnectionname)
appName: 'nsclassroom-dgyn27h2dfoyo'
ResourceGroupName: $(RG)
Following this along, I went into the Kudu logs. I found that Kudu is trying to deploy to an old branch that we no longer have even though the Pipeline YAML code is in a completely different branch, and the YAML code specifies the branch I am deploying to.
Here is the log from the KUDU output. The old branch is called staging-hp, and the new one is just called staging.
<step title="BackgroundTrace" date="2021-05-26T14:54:09.702" instance="bdff23" url="/api/zipdeploy" method="POST">
<step title="LockFile 'C:\home\site\locks\deployments.lock' acquired" date="2021-05-26T14:54:09.718"/>
<!-- duration: 16ms -->
<step title="Creating temporary deployment" date="2021-05-26T14:54:09.733"/>
<!-- duration: 62ms -->
<step title="Performing fetch based deployment" date="2021-05-26T14:54:09.811">
<step title="Before sending BuildRequestReceived status to /api/updatedeploystatus" date="2021-05-26T14:54:09.936"/>
<!-- duration: 0ms -->
</step>
<!-- duration: 219ms -->
<step title="LockFile 'C:\home\site\locks\deployments.lock' released" date="2021-05-26T14:54:10.061"/>
<!-- duration: 16ms -->
<step title="Error occurred" date="2021-05-26T14:54:10.077" type="error" text="One or more errors occurred." stackTrace=" at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) at Kudu.Core.Deployment.FetchDeploymentManager.<>c__DisplayClass11_1.<PerformBackgroundDeployment>b__3() in C:\Kudu Files\Private\src\master\Kudu.Core\Deployment\FetchDeploymentManager.cs:line 396 at Kudu.Contracts.Infrastructure.LockExtensions.TryLockOperation(IOperationLock lockObj, Action operation, String operationName, TimeSpan timeout) in C:\Kudu Files\Private\src\master\Kudu.Contracts\Infrastructure\LockExtensions.cs:line 34 at Kudu.Contracts.Infrastructure.LockExtensions.LockOperation(IOperationLock lockObj, Action operation, String operationName, TimeSpan timeout) in C:\Kudu Files\Private\src\master\Kudu.Contracts\Infrastructure\LockExtensions.cs:line 46 at Kudu.Core.Deployment.FetchDeploymentManager.<>c__DisplayClass11_0.<PerformBackgroundDeployment>b__1() in C:\Kudu Files\Private\src\master\Kudu.Core\Deployment\FetchDeploymentManager.cs:line 380" innerText="ChangeSetId(staging-hp) does not match 479f5474d10445218660a74f0664e206, 'master' or 'HEAD'" innerStackTrace=" at Kudu.Core.SourceControl.NullRepository.GetChangeSet(String id) in C:\Kudu Files\Private\src\master\Kudu.Core\SourceControl\NullRepository.cs:line 81 at Kudu.Core.Deployment.FetchDeploymentManager.<PerformDeployment>d__9.MoveNext() in C:\Kudu Files\Private\src\master\Kudu.Core\Deployment\FetchDeploymentManager.cs:line 224 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at Kudu.Core.Deployment.FetchDeploymentManager.<PerformDeployment>d__9.MoveNext() in C:\Kudu Files\Private\src\master\Kudu.Core\Deployment\FetchDeploymentManager.cs:line 292"/>
<!-- duration: 16ms -->
</step>
<!-- duration: 406ms -->
I figured this out, there was a settings.xml file in wwwroot/site/deployments/ with the old branch details on it. If you delete settings.xml it will let go of that branch. You may not be able to delete the file though because its set to read-only permission and what you have to do is go into the configuration settings of your web app and change WEBSITE_RUN_FROM_PACKAGE value to 0, save that refresh the web app and then you will be able to delete the file. Then you can re-run the pipeline until your heart is content. :)