首页 > 解决方案 > GitHub 操作部署到 Azure Web 应用时出错

问题描述

刚刚转换为新的 GitHub App Services 操作构建和部署管道并收到以下错误:

Run azure/webapps-deploy@v2
  with:
    app-name: ***
    slot-name: ***
    publish-profile: ***
    package: .
Package deployment using ZIP Deploy initiated.
Fetching changes.
Cleaning up temp folders from previous zip deployments and extracting pushed zip file D:\local\Temp\zipdeploy\gtfnmdqs.zip (19.64 MB) to D:\local\Temp\zipdeploy\extracted
Error: Failed to deploy web package to App Service.
Error: Deployment Failed with Error: Package deployment using ZIP Deploy failed. Refer logs for more details.
App Service Application URL: https://***.azurewebsites.net

除了部署失败之外,日志中没有任何内容指示错误。没有对存储库进行任何更改(除了新的 yaml),并且不确定错误是否是因为没有检测到代码更改。如果是这样,为什么要抛出错误与警告?

yml 是 Azure 生成的标准:

on:
  workflow_dispatch:
    branches: [main]

jobs:
  build:
    runs-on: windows-latest

    steps:
    - uses: actions/checkout@v2

    - name: Set up .NET Core
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: '6.0.x'
        include-prerelease: true

    - name: Build with dotnet
      run: dotnet build --configuration Release

    - name: dotnet publish
      run: dotnet publish -c Release -o ${{env.DOTNET_ROOT}}/myapp

    - name: Upload artifact for deployment job
      uses: actions/upload-artifact@v2
      with:
        name: .net-app
        path: ${{env.DOTNET_ROOT}}/myapp

  deploy:
    runs-on: windows-latest
    needs: build
    environment:
      name: '***'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}

    steps:
    - name: Download artifact from build job
      uses: actions/download-artifact@v2
      with:
        name: .net-app

    - name: Deploy to Azure Web App
      id: deploy-to-webapp
      uses: azure/webapps-deploy@v2
      with:
        app-name: '***'
        slot-name: '***'
        publish-profile: ${{ secrets.AzureAppService_PublishProfile_*** }}
        package: .

旁注:我有一个运行良好的新应用服务,这是一个现有的应用服务,最初使用以前的 CI/DI。断开连接并为 CI/DI 生成新连接。不确定这是否重要。

Azure 日志详细信息:

在此处输入图像描述

部署似乎与服务计划的 CPU 挂钩,这解释了为什么每个人都在增加层级以解决:

在此处输入图像描述

在此处输入图像描述

尝试关闭所有应用服务并在没有其他任何运行的情况下进行部署,但没有任何效果。

还尝试将发布配置文件导入 Visual Studio,但也失败了......

在此处输入图像描述

甚至尝试删除退出的应用服务并创建新的应用服务,但仍然无法部署。

Package deployment using ZIP Deploy initiated.
Updating submodules.
Preparing deployment for commit id '10c1139fcb'.
Generating deployment script.
Using cached version of deployment script (command: 'azure -y --no-dot-deployment -r "D:\local\Temp\zipdeploy\extracted" -o "D:\home\site\deployments\tools" --basic --sitePath "D:\local\Temp\zipdeploy\extracted\Source\Web\cdcavell\cdcavell.csproj"').
Running deployment command...
Command: "D:\home\site\deployments\tools\deploy.cmd"
Handling Basic Web Site deployment.
Creating app_offline.htm
Error: Could not find a part of the path 'D:\local\Temp\zipdeploy\extracted\Source\Web\cdcavell\cdcavell.csproj'.
KuduSync.NET from: 'D:\local\Temp\zipdeploy\extracted\Source\Web\cdcavell\cdcavell.csproj' to: 'D:\home\site\wwwroot'
Failed exitCode=1, command="kudusync" -v 50  -f "D:\local\Temp\zipdeploy\extracted\Source\Web\cdcavell\cdcavell.csproj" -t "D:\home\site\wwwroot" -n "D:\home\site\deployments\10c1139fcb004b0fbd7eb608cceb0855\manifest" -p "D:\Program Files (x86)\SiteExtensions\Kudu\94.30524.5227\bin\Scripts\firstDeploymentManifest" -i ".git;.hg;.deployment;deploy.cmd"
An error has occurred during web site deployment.
Error: Could not find a part of the path 'D:\local\Temp\zipdeploy\extracted\Source\Web\cdcavell\cdcavell.csproj'.\r\nD:\Program Files (x86)\SiteExtensions\Kudu\94.30524.5227\bin\Scripts\starter.cmd "D:\home\site\deployments\tools\deploy.cmd"
Error: Failed to deploy web package to App Service.
Error: Deployment Failed with Error: Package deployment using ZIP Deploy failed. Refer logs for more details.
App Service Application URL: https://cdcavell.azurewebsites.net

标签: azure-web-app-servicegithub-actions

解决方案


终于可以部署了。必须将发布配置文件导入 Visual Studio 并使用 zip deploy 发布。

 cdcavell -> D:\Projects\GitHub\cdcavell.name\Source\Web\cdcavell\obj\Release\net5.0\PubTmp\Out\
Publishing D:\Projects\GitHub\cdcavell.name\Source\Web\cdcavell\obj\Release\net5.0\PubTmp\cdcavell-20210710130209924.zip to https://cdcavell.scm.azurewebsites.net/api/zipdeploy...
Zip Deployment succeeded.
Web App was published successfully https://cdcavell.azurewebsites.net/
========== Build: 6 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
========== Publish: 1 succeeded, 0 failed, 0 skipped ==========
Installation of Web App Site extension Microsoft.AspNetCore.AzureAppServices.SiteExtension is in progress...
Successfully installed Web App extension Microsoft.AspNetCore.AzureAppServices.SiteExtension
Restarting the Web App...
Successfully restarted Web App.

似乎这会导致安装 Web App Site 扩展。之后,我能够使用 Azure App Service 中的 Sync 成功执行手动部署。

在此处输入图像描述

更新:新问题是现在在应用服务中自动设置以下内容,并导致站点只能从 zip 文件中读取。导致我的网站出现各种访问问题。

  {
    "name": "WEBSITE_RUN_FROM_PACKAGE",
    "value": "1",
    "slotSetting": false
  },

显然导致 /Home/Index 不再可访问...

在此处输入图像描述

删除此设置会一起禁用我的应用服务。

在此处输入图像描述

最终解决方案:

1 -WEBSITE_RUN_FROM_PACKAGE在应用服务应用程序设置中是必需的。因为这是一个 zip 部署。

  {
    "name": "WEBSITE_RUN_FROM_PACKAGE",
    "value": "1",
    "slotSetting": false
  }

下一点是我的错,我知道答案当时太沮丧而无法看到。

2 - 存储库包含多个项目。需要为每个构建和发布命令指定项目文件。

    - name: Build with dotnet
      run: dotnet build D:\a\cdcavell.name\cdcavell.name\Source\Web\cdcavell\cdcavell.csproj --configuration Release

    - name: dotnet publish
      run: dotnet publish D:\a\cdcavell.name\cdcavell.name\Source\Web\cdcavell\cdcavell.csproj -c Release -o ${{env.DOTNET_ROOT}}/myapp

我不认为PROJECT在应用程序设置中真的意味着什么,但现在还不确定。

站点仍然存在负载问题,但它从来都不是为 zip 部署而设计的,所以现在必须解决这个问题。无论如何,我提到的两点是导致我在新的 GitHub Action 部署中出现问题的原因。

我确实希望这可以减轻其他人我刚刚经历的挫败感...

加载问题是我的想法:Failed to open siteversion.txt. ZipFS setup failed. Error: 0x80070003。丢失了我的站点地图,现在需要重新开发该过程。同样,这是一个 zip 部署,因此不能再依赖于利用文件写入来做简单的事情。

zip 部署的最大问题是我也失去了生成签名凭据的能力。这对我来说是一种表演终结者和一个巨大的安全问题。但是,嘿,我猜 zip deploy 是最新的热潮。

            // not recommended for production - you need to store your key material somewhere secure
            // builder.AddDeveloperSigningCredential();
            RsaSecurityKey key = rsa.GetKey();
            builder.AddValidationKey(key);
            builder.AddSigningCredential(key, SecurityAlgorithms.RsaSha512);

而这个我什至没有答案......

在此处输入图像描述

在此处输入图像描述


推荐阅读