azure - 带有 "az webapp deployment source config-zip"的部署 Azure Web 应用程序无法正常工作

标签 azure github-actions azure-cli azure-deployment azure-webapps

我有一个简单的 web.api,我想将其部署到 azure。我为此使用 github actions。

如果我使用 azure/webapps-deploy@v2 步骤,一切都会顺利进行。

 deploy:
    runs-on: ubuntu-latest
    needs: build
    steps:
    - name: Download artifact from build job
      # published previously via `dotnet publish` and 
      #  uses: actions/upload-artifact@v3
      #   with:
      #     name: webapp
      uses: actions/download-artifact@v3
      with:
        name: webapp
        path: webapp
    - name: Login via Azure CLI
      uses: azure/login@v1
      with:
        # secret in json form are added into repository settings
        creds: ${{ secrets.AZURE_CREDENTIALS }}
    - name: Deploy web app
      id: deploywebapp
      uses: azure/webapps-deploy@v2
      with:
        app-name: ${{ env.AZURE_WEBAPP_NAME }}
        package: webapp

我可以部署应用程序,然后可以通过 https://%AZURE_WEBAPP_NAME%.azurewebsites.net/swagger/index.html 访问它。现在,我想使用普通的 azure CLI 命令并替换上述步骤(我所做的唯一更改):

  deploy:
    runs-on: ubuntu-latest
    needs: build
    steps:
    - name: Download artifact from build job
      uses: actions/download-artifact@v3
      with:
        name: webapp
        path: webapp
    - name: Azure Login
      uses: azure/CLI@v1
      with:
        azcliversion: 2.30.0
        inlineScript: |
          az login --service-principal \
          -u ${{ secrets.DEPLOYMENT_AZURE_CLIENT_ID }} \
          -p ${{ secrets.DEPLOYMENT_AZURE_CLIENT_SECRET }} \
          -t ${{ secrets.DEPLOYMENT_AZURE_TENANT_ID }}        
    - name: Deploy to Azure WebApp
      uses: azure/CLI@v1
      with:
        azcliversion: 2.30.0
        inlineScript: |
          zip -r webapp.zip .
          az webapp deployment source config-zip --resource-group ${{ env.AZURE_WEBAPP_RG }} --name ${{ env.AZURE_WEBAPP_NAME }} --src "webapp.zip"

此步骤也不会失败,但已部署的应用程序无法访问(使用先前的 url)并返回 404 错误。部署步骤输出为:

WARNING: Getting scm site credentials for zip deployment
WARNING: Starting zip deployment. This operation can take a while to complete ...
WARNING: Deployment endpoint responded with status code 202
{
  "active": true,
  "author": "N/A",
  "author_email": "N/A",
  "build_summary": {
    "errors": [],
    "warnings": []
  },
  "complete": true,
  "deployer": "Push-Deployer",
  "end_time": "..",
  "id": "..",
  "is_readonly": true,
  "is_temp": false,
  "last_success_end_time": "..",
  "log_url": "https://%AZURE_WEBAPP_NAME%.scm.azurewebsites.net/api/deployments/latest/log",
  "message": "Created via a push deployment",
  "progress": "",
  "received_time": "..",
  "site_name": "%AZURE_WEBAPP_NAME%",
  "start_time": "...",
  "status": 4,
  "status_text": "",
  "url": "https://%AZURE_WEBAPP_NAME%.scm.azurewebsites.net/api/deployments/latest"
}

az script ran successfully.

这两个步骤有什么区别?

UPDATE1:我已将 --debug 参数添加到 az webapp deployment .. 命令,并且在详细信息中没有看到任何错误或失败输出

UPDATE2:当我 ssh 到 Azure 服务器时,我看到了所需的文件:

root@..:~/site/wwwroot/webapp# ls
DeploymentTemplates                 Swashbuckle.AspNetCore.SwaggerGen.dll  WebApiDemo.deps.json  WebApiDemo.runtimeconfig.json  web.config
Microsoft.OpenApi.dll               Swashbuckle.AspNetCore.SwaggerUI.dll   WebApiDemo.dll        appsettings.Development.json
Swashbuckle.AspNetCore.Swagger.dll  WebApiDemo 

UPDATE3:看起来这可能与以下事实有关:当我使用普通 CLI 命令时,实际生成的文件会放置得更深一层(请参阅之前的 ssh 输出并注意 webapp 文件夹)。在正确部署的应用程序中,部署的文件放置在 wwwroot 的根目录中:

root@..:~/site/wwwroot# ls
DeploymentTemplates                 Swashbuckle.AspNetCore.SwaggerGen.dll  WebApiDemo.deps.json  WebApiDemo.runtimeconfig.json  web.config
Microsoft.OpenApi.dll               Swashbuckle.AspNetCore.SwaggerUI.dll   WebApiDemo.dll        appsettings.Development.json
Swashbuckle.AspNetCore.Swagger.dll  WebApiDemo  

最佳答案

这两个任务之间的主要区别是 azure/web-apps-deploy@v2正在将文件复制到底层存储到 home/site/wwwroot其中az webapp deployment config-zip将 zip 文件复制到 home/data/SitePackages 。如果您有WEBSITE_RUN_FROM_PACKAGE="1" ,那么平台会将zip文件挂载在 SitePackages 中作为home/site/wwwroot目录,否则,将提取 zip 文件的内容,类似于 azure/web-apps-deploy@v2确实如此。

diagnostic logs将帮助确定导致您的应用出现 404 错误的原因。根据您提供的信息;我会确保 zip 命令实际上从 actions/download-artifact@v3 压缩正确的工件。 。由于您正在压缩根目录,因此您可能会压缩文件夹而不是构建的二进制文件。

关于azure - 带有 "az webapp deployment source config-zip"的部署 Azure Web 应用程序无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76467930/

相关文章:

docker - 在私有(private) docker 容器中运行整个 GitHub Actions 工作流作业

azure - Azure 自动化中的 Connect-MgGraph

azure - 请参阅使用 YAML 管道在 Azure DevOps 中构建工件

python - 使用 API REST 创建的 GitHub secret 但返回空

java - 使用 GitHub CI 时 Dockerfile COPY 失败 : stat no such file,

azure - 为什么此 az login 命令在 Gitlab CI 中失败?

azure-devops - Az CLI : Cannot run pipeline with runtime parameters

azure - 为什么我无权访问 Azure 门户中的 AAD 应用程序注册,但可以使用 Azure CLI 查看它?

azure - 无论如何,要查看 Application Insight SDK 上传到 azure 的内容吗?

spring-cloud-azure-feature-management 与 application.yaml