【问题标题】:How to deploy a WebApp from a folder (not a zip) in Azure DevOps如何从 Azure DevOps 中的文件夹(不是 zip)部署 WebApp
【发布时间】:2020-05-20 09:56:06
【问题描述】:

我无法让 DevOps 使用文件夹进行部署,它给了我这个错误:

[错误]错误:找不到具有指定模式的包: d:\a\1\a*.deploy.cmd
检查任务中提到的包是否 在构建或先前阶段中作为工件发布,并且 在当前作业中下载。

Azure App Service Deploy Task 文档说明了 Package 参数:

包的文件路径,或包含应用服务的文件夹 MSBuild 生成的内容,或者压缩到压缩的 zip 或 war 文件中。

这是我的发布任务:

  - task: DotNetCoreCLI@2
    inputs:
      command: publish
      publishWebProjects: false
      arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
      zipAfterPublish: false
      modifyOutputPath: true
      projects: |
        src/Company/Project.csproj 

和我的部署任务:

  - task: AzureRmWebAppDeployment@4
    inputs:
      ConnectionType: 'PublishProfile'
      PublishProfilePath: '$(System.DefaultWorkingDirectory)/src/Company/Properties/PublishProfiles/WebDeploy.pubxml'
      PublishProfilePassword: '$(password)'
      Package: '$(Build.ArtifactStagingDirectory)/Company'

为什么要查找 deploy.cmd?我做错了什么?

【问题讨论】:

  • 一年多之后,您是否设法解决了这个问题?

标签: azure deployment azure-devops


【解决方案1】:

错误:找不到具有指定模式的包:d:\a\1\a*.deploy.cmd

从错误信息来看,这个问题的根本原因可能是你的路径中没有这样的文件(xxx.deploy.cmd)。

“Dotnet Publish”任务不会生成此文件。

要解决这个问题,您需要添加一个“Dotnet build”任务。此任务将生成必要的文件(例如 deploy.cmd):

同时,您还需要在arguments字段中添加配置参数。

/p:DeployOnBuild=true /p:WebPublishMethod=package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)

这是一个例子:

- task: DotNetCoreCLI@2
  displayName: Build
  inputs:
    projects: '**/*.csproj'
    arguments: '/p:DeployOnBuild=true /p:WebPublishMethod=package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)'

- task: DotNetCoreCLI@2
  displayName: Publish
  inputs:
    command: publish
....

然后会添加xxx.deploy.cmd。

希望这会有所帮助。

【讨论】:

  • 添加 /p:PackageAsSingleFile=true 是否会改为部署 zip?那么发布命令是否必要?
  • 如果您查看我的发布任务,那正是我正在做的事情。问题是“AzureRmWebAppDeployment”尝试部署文件夹失败。这实际上不支持吗?
  • 来自这个关于azure app service deploy task的文档:“包:包含由MSBuild生成的应用服务内容的文件夹”。该文件夹受任务支持。但必要的配置文件需要包含在 artifacts 文件夹中(例如 deploy.cmd 文件)。
  • MsDeploy 能够在没有 cmd 文件的情况下部署文件夹,但是当您使用 Visual Studio 发布时它会这样做。这也是not how it's documented
  • 根据您的要求,我建议您可以使用 "ConnectionType:AzureRM" (Azure Resource Manager) 。在这种情况下,默认部署方法是 web deploy。您可以尝试将文件夹直接部署到 webapp。请测试它并检查它是否可以工作。如果需要部署。默认为cmd文件,部署方式可以是zip deploy。
【解决方案2】:

请尝试

  - task: AzureRmWebAppDeployment@4
    inputs:
      ConnectionType: 'PublishProfile'
      PublishProfilePath: '$(System.DefaultWorkingDirectory)/src/Company/Properties/PublishProfiles/WebDeploy.pubxml'
      PublishProfilePassword: '$(password)'
      Package: '$(Build.ArtifactStagingDirectory)/Company/*'

区别在于Package输入。

【讨论】:

  • 错误:多个包与指定模式匹配:d:\a\1\a\Company*。请限制搜索模式。我需要将其指向 .dll 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-13
  • 2021-10-29
  • 2020-11-02
  • 1970-01-01
  • 2020-06-27
  • 2023-01-20
  • 1970-01-01
相关资源
最近更新 更多