azureazure-devopsyamlazure-web-app-servicekudu

Kudu trying to Zip Deploy from old Azure Branch branch


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  -->


Solution

  • 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. :)