如何从 Azure DevOps 中的文件夹(不是 zip)部署 WebApp
Posted
技术标签:
【中文标题】如何从 Azure DevOps 中的文件夹(不是 zip)部署 WebApp【英文标题】:How to deploy a WebApp from a folder (not a zip) in Azure DevOps 【发布时间】: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?我做错了什么?
【问题讨论】:
一年多之后,您是否设法解决了这个问题? 【参考方案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 吗?以上是关于如何从 Azure DevOps 中的文件夹(不是 zip)部署 WebApp的主要内容,如果未能解决你的问题,请参考以下文章
如何获取从 Azure Devops / VSTS / TFS 中的“Windows 机器文件复制”任务复制的文件总数?
如何从 Azure Devops 服务器迁移到 Azure Devops 服务中的现有组织
如何从 Azure DevOps Pipeline 读取 Azure 文件共享文件
作业终止后如何将生成的文件从 Azure Databricks 导出到 Azure DevOps?