使用策略不适用于AzureRmWebAppDeployment @ 4

时间:2019-10-05 23:24:23

标签: azure-devops azure-pipelines azure-pipelines-release-pipeline

我开始使用策略runonce yaml模式,因此可以将环境标签添加到发布中并添加批准步骤。 https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=azure-devops&tabs=schema

这样做,AzureRmWebAppDeployment @ 4步骤以以下格式部署whol文件

/ site / wwwroot / mywebApi / Content / D_C / a / 1 / s / src / mywebApi / obj / Release / Package / PackageTmp /

而不是将软件包解压缩到/ site / wwwroot / mywebApi /

这在我不使用策略时就可以工作

这曾经有用


jobs:
  - job: Deploy
    variables:
      vmImage: 'windows-latest'   
    pool:
      vmImage: $(vmImage)  
    displayName: 'Deploy ${{ parameters.project }} ${{ parameters.envName }}'         
    continueOnError: "false"
    steps:
    - task: DownloadBuildArtifacts@0
      inputs:
        buildType: 'current'
        downloadType: 'single'
        artifactName: '${{ parameters.project }}${{ parameters.envName }}'
        downloadPath: '$(build.artifactStagingDirectory)'
    - task: AzureRmWebAppDeployment@4
      inputs:
        ConnectionType: 'AzureRM'
        azureSubscription: '****Azure'
        appType: 'webApp'
        WebAppName: '${{ parameters.webAppName }}'
        deployToSlotOrASE: true
        ResourceGroupName: '****'
        SlotName: '${{ parameters.slotName }}'
        VirtualApplication: '${{ parameters.virtualApplication }}'
        packageForLinux: '$(build.artifactStagingDirectory)/**/*.zip'

这行不通,但这是我要使用环境标记发布的内容

jobs:
  # track deployments on the environment
- deployment: DeployWeb
  displayName: deploy paystub Web App 
  environment: ${{ parameters.envName }}  
  variables:
    vmImage: 'windows-latest'   
  pool:
    vmImage: $(vmImage)  
  continueOnError: "false"
  strategy:
    runOnce:
      deploy:
        steps:
        - task: DownloadBuildArtifacts@0
          inputs:
            buildType: 'current'
            downloadType: 'single'
            artifactName: '${{ parameters.project }}${{ parameters.envName }}'
            downloadPath: '$(build.artifactStagingDirectory)'
        - task: AzureRmWebAppDeployment@4
          inputs:
            ConnectionType: 'AzureRM'
            azureSubscription: '***Azure'
            appType: 'webApp'
            WebAppName: '${{ parameters.webAppName }}'
            deployToSlotOrASE: true
            ResourceGroupName: '*****'
            SlotName: '${{ parameters.slotName }}'
            VirtualApplication: '${{ parameters.virtualApplication }}'
            packageForLinux: '$(build.artifactStagingDirectory)/**/*.zip'

我希望新步骤还将代码部署到 这个文件夹 打包到/ site / wwwroot / mywebApi /

而不是对

进行一些kudu复制

/ site / wwwroot / mywebApi / Content / D_C / a / 1 / s / src / mywebApi / obj / Release / Package / PackageTmp /

1 个答案:

答案 0 :(得分:0)

我能够重现相同的情况。不幸的是,我没有找到通过配置任务AzureRmWebAppDeployment来解决此问题的方法。该任务似乎自动使用kudu将文件复制到Azure App服务,而msdeploy用于将文件部署在非策略管道中。您可以报告此问题here

我找到了解决方法,方法是更改​​vsbuild任务的msbuild参数,并添加一个zip存档任务。检查以下内容:

使用clkpredict [] list_info[0]= ('clkpredict') IndexError: list assignment index out of range 将内部版本发布到/t: publish文件夹中,以便在$(build.artifactstagingdirectory)\publish任务中进行压缩。

ArchiveFiles

使用- task: VSBuild@1 displayName: 'Build solution **\*.sln' inputs: msbuildArgs: '/t:publish /p:outputpath="$(build.artifactstagingdirectory)\\"' platform: '$(BuildPlatform)' configuration: '$(BuildConfiguration)' clean: true restoreNugetPackages: true 任务从上述步骤压缩archiveFiles文件夹中的所有文件。

\publish

使用 - task: ArchiveFiles@2 inputs: rootFolderOrFile: '$(Build.ArtifactStagingDirectory)\\publish\\*' includeRootFolder: true archiveType: 'zip' archiveFile: '$(Build.ArtifactStagingDirectory)/package/$(Build.BuildId).zip' replaceExistingArchive: true 任务发布通过上述步骤创建的zip文件

PublishBuildArtifacts

通过上述步骤,在Deploy阶段下载的zip文件将仅包含已部署的代码。

希望以上步骤对您有所帮助。