You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Github Actions部署Asp.Net Core MVC 6.0至Azure显示成功但未生效

问题:ASP.NET Core MVC 6.0 部署至Azure App Service Linux失败(Github Action显示成功但网站未更新)

背景

我有一个基于ASP.NET Core MVC 6.0的应用,包含多个类库项目,集成了ASP.NET Identity,代码托管在Github仓库。本地构建和运行完全正常,但通过Github Action部署到Azure App Service Linux时,尽管Action状态显示成功,网站却从未实际更新。

补充信息:有类似问题反馈称,降级到.NET 5后部署成功。

调试更新

  1. 更新1:发现Github Actions中存储的Azure Web App发布配置文件密钥为空,多次重新添加密钥值后依然为空。
  2. 更新2:访问Azure App Service的KUDU站点,查看../site/wwwroot目录,未找到hostingstart.html,但存在大量类库项目的DLL文件。

附Github Action YAML配置

name: Build and deploy ASP.Net Core app to an Azure Web App

env:
  AZURE_WEBAPP_NAME: house-platform-dev    # set this to the name of your Azure Web App
  AZURE_WEBAPP_PACKAGE_PATH: '.'      # set this to the path to your web app project, defaults to the repository root
  DOTNET_VERSION: '6.0'                 # set this to the .NET Core version to use

on:
  push:
    branches: [ "master" ]
  workflow_dispatch:

permissions:
  contents: read

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - name: Set up .NET Core
        uses: actions/setup-dotnet@v2
        with:
          dotnet-version: ${{ env.DOTNET_VERSION }}
      
      - name: Set up dependency caching for faster builds
        uses: actions/cache@v3
        with:
          path: ~/.nuget/packages
          key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
          restore-keys: |
            ${{ runner.os }}-nuget-
      - 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@v3
        with:
          name: .net-app
          path: ${{env.DOTNET_ROOT}}/myapp

  deploy:
    permissions:
      contents: none
    runs-on: ubuntu-latest
    needs: build
    environment:
      name: 'Development'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}

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

      - name: Deploy to Azure Web App
        id: deploy-to-webapp
        uses: azure/webapps-deploy@v2
        with:
          app-name: ${{ env.AZURE_WEBAPP_NAME }}
          publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
          package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}

提问

  1. 有人知道该问题的原因吗?
  2. 如何调试该场景?

解答

问题1:可能的原因分析

  1. 发布配置文件密钥失效/未正确读取:这是最可能的核心问题。Action显示成功不代表部署真的执行了——如果没有有效凭据,部署步骤可能静默跳过或失败但未被Action标记为错误。大概率不是Github Bug,更可能是:

    • 粘贴发布配置文件时带了多余空格、换行,或者没完整复制内容
    • Github仓库的Secrets权限设置异常,导致Action无法读取该密钥
    • YAML中的密钥名称与Github后台设置的名称不一致(大小写、拼写要完全匹配)
  2. 部署路径错误:YAML里AZURE_WEBAPP_PACKAGE_PATH设为.,但下载artifact后工作目录是发布产物所在的.net-app目录,部署时可能误传了仓库根目录内容而非正确的发布产物。从KUDU看到的类库DLL而非Web项目发布文件,正好印证了这一点——正确的发布产物应该包含Web项目DLL、appsettings.json、静态资源等,而非所有类库的编译文件。

  3. .NET 6与Azure运行时的适配问题:降级到.NET 5成功可能是表象,但也不排除Azure App Service的Linux运行时未正确配置.NET 6环境,或者ASP.NET Identity的某些组件在Linux发布打包时缺失依赖。

问题2:调试步骤

  1. 验证发布配置文件有效性:

    • 本地用下载的发布配置文件执行dotnet publish /p:PublishProfile=你的配置文件.pubxml,确认配置本身能正常发布
    • 在Github Action的build步骤添加片段,输出密钥前几位(避免泄露),验证是否正确读取:
      echo "Publish profile preview: ${AZURE_WEBAPP_PUBLISH_PROFILE:0:20}"
      
  2. 修正部署路径:

    • 把部署步骤的package参数改为.(因为下载artifact后当前目录就是发布产物),或者删除AZURE_WEBAPP_PACKAGE_PATH这个环境变量,让部署Action默认使用当前目录。
  3. 深挖Action日志细节:

    • 进入Github Action运行详情,展开Deploy to Azure Web App的所有日志,查看是否有隐藏的错误(比如权限不足、路径不存在)
    • 给dotnet publish添加详细日志参数:dotnet publish -c Release -o ${{env.DOTNET_ROOT}}/myapp -v detailed,确认发布过程没有遗漏必要文件。
  4. 检查Azure App Service配置:

    • 确认App Service运行时设置为.NET 6 (Linux),不要选错版本或系统
    • 在KUDU的Process Explorer查看是否有dotnet进程运行,或者查看Logs目录下的stdout/stderr日志,排查应用启动报错
    • 手动把本地发布产物(bin/Release/net6.0/publish目录)通过KUDU的Zip Push Deploy上传,验证是否能正常运行,排除部署工具的问题。
  5. 排查ASP.NET Identity相关问题:

    • 确认发布时包含了Identity的迁移文件、UI组件静态资源
    • 在本地Linux环境(比如Docker容器)运行发布产物,排查Linux特有的兼容性问题。

内容的提问来源于stack exchange,提问作者Goober

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 19:10:52