Azure Pipeline部署.NET Core应用后wwwroot为空问题咨询
我有一个.NET Core应用,通过Azure Pipeline部署到App Service。流水线执行成功,也生成了有效的构建工件,但通过FTP访问App Service时发现wwwroot目录为空。部署文件夹里有个新文件夹,里面是显示部署成功的日志。Azure门户的部署中心也显示部署成功,但有个奇怪的点:部署中心里的一个部署槽引用了错误分支(之前误在UI点了同步),不过关联的构建ID和提交ID是正确的,来自正确分支。部署文件夹的日志也显示部署成功,但访问应用时报错,错误日志指向C:\home\site\wwwroot\目录。
附上流水线YAML配置:
- task: UseDotNet@2 inputs: version: '6.0.x' - task: DotNetCoreCLI@2 inputs: command: 'restore' feedsToUse: 'select' vstsFeed: 'thisisnumero' # 一串数字和字母 projects: 'source/ui/code/code.sln' - task: DotNetCoreCLI@2 inputs: command: 'build' arguments: '--configuration $(buildConfiguration)' displayName: 'dotnet build $(buildConfiguration)' projects: 'source/ui/code/code.sln' - task: DotNetCoreCLI@2 inputs: command: publish publishWebProjects: True arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)' zipAfterPublish: True - task: PublishPipelineArtifact@1 inputs: targetPath: '$(Build.ArtifactStagingDirectory)' artifactName: 'code' - task: AzureWebApp@1 inputs: azureSubscription: 'V2B Web App Configurator' #appType: 'webAppLinux' appName: 'videotobricks' package: '$(Build.ArtifactStagingDirectory)/**/*.zip'
1. 确认FTP访问的目标槽是否正确
你提到部署槽引用了错误分支,但构建ID正确。先检查你FTP连接的路径:生产槽的路径是site/wwwroot,而部署槽的路径是site/slots/[槽名]/wwwroot,很可能是你误访问了那个同步错误的部署槽,而非生产槽。
2. 显式指定AzureWebApp任务的部署槽
你的YAML未指定deployToSlotOrASE参数,默认部署到生产槽,但手动同步操作可能导致槽状态异常。建议显式指定部署目标为生产槽,避免歧义:
- task: AzureWebApp@1 inputs: azureSubscription: 'V2B Web App Configurator' appName: 'videotobricks' package: '$(Build.ArtifactStagingDirectory)/**/*.zip' deployToSlotOrASE: true slotName: 'production' # 明确指定生产槽
3. 修正dotnet publish的项目指向
publishWebProjects: True会自动识别解决方案中的Web项目,但如果存在多个项目,可能出现识别错误。建议显式指定Web项目的csproj路径:
- task: DotNetCoreCLI@2 inputs: command: publish projects: 'source/ui/code/[你的Web项目名称].csproj' # 替换为实际Web项目路径 arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)' zipAfterPublish: True
同时可以查看构建阶段的dotnet publish日志,确认是否有正确生成Web应用文件到指定目录。
4. 检查App Service部署中心配置
在Azure门户的部署中心,确认部署方式为Azure Pipelines,而非本地Git、FTP等其他方式。点击部署历史中的对应记录,查看详细日志,确认文件是否被实际复制到wwwroot目录。
5. 清理异常部署槽并重新部署
那个误同步的部署槽可能干扰了生产槽的状态,尝试删除该槽后重新运行流水线,再检查wwwroot目录内容。
内容的提问来源于stack exchange,提问作者iasksillyquestions

