Github Actions部署Asp.Net Core MVC 6.0至Azure显示成功但未生效
背景
我有一个基于ASP.NET Core MVC 6.0的应用,包含多个类库项目,集成了ASP.NET Identity,代码托管在Github仓库。本地构建和运行完全正常,但通过Github Action部署到Azure App Service Linux时,尽管Action状态显示成功,网站却从未实际更新。
补充信息:有类似问题反馈称,降级到.NET 5后部署成功。
调试更新
- 更新1:发现Github Actions中存储的Azure Web App发布配置文件密钥为空,多次重新添加密钥值后依然为空。
- 更新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:可能的原因分析
发布配置文件密钥失效/未正确读取:这是最可能的核心问题。Action显示成功不代表部署真的执行了——如果没有有效凭据,部署步骤可能静默跳过或失败但未被Action标记为错误。大概率不是Github Bug,更可能是:
- 粘贴发布配置文件时带了多余空格、换行,或者没完整复制内容
- Github仓库的Secrets权限设置异常,导致Action无法读取该密钥
- YAML中的密钥名称与Github后台设置的名称不一致(大小写、拼写要完全匹配)
部署路径错误:YAML里
AZURE_WEBAPP_PACKAGE_PATH设为.,但下载artifact后工作目录是发布产物所在的.net-app目录,部署时可能误传了仓库根目录内容而非正确的发布产物。从KUDU看到的类库DLL而非Web项目发布文件,正好印证了这一点——正确的发布产物应该包含Web项目DLL、appsettings.json、静态资源等,而非所有类库的编译文件。.NET 6与Azure运行时的适配问题:降级到.NET 5成功可能是表象,但也不排除Azure App Service的Linux运行时未正确配置.NET 6环境,或者ASP.NET Identity的某些组件在Linux发布打包时缺失依赖。
问题2:调试步骤
验证发布配置文件有效性:
- 本地用下载的发布配置文件执行
dotnet publish /p:PublishProfile=你的配置文件.pubxml,确认配置本身能正常发布 - 在Github Action的build步骤添加片段,输出密钥前几位(避免泄露),验证是否正确读取:
echo "Publish profile preview: ${AZURE_WEBAPP_PUBLISH_PROFILE:0:20}"
- 本地用下载的发布配置文件执行
修正部署路径:
- 把部署步骤的
package参数改为.(因为下载artifact后当前目录就是发布产物),或者删除AZURE_WEBAPP_PACKAGE_PATH这个环境变量,让部署Action默认使用当前目录。
- 把部署步骤的
深挖Action日志细节:
- 进入Github Action运行详情,展开
Deploy to Azure Web App的所有日志,查看是否有隐藏的错误(比如权限不足、路径不存在) - 给
dotnet publish添加详细日志参数:dotnet publish -c Release -o ${{env.DOTNET_ROOT}}/myapp -v detailed,确认发布过程没有遗漏必要文件。
- 进入Github Action运行详情,展开
检查Azure App Service配置:
- 确认App Service运行时设置为
.NET 6 (Linux),不要选错版本或系统 - 在KUDU的
Process Explorer查看是否有dotnet进程运行,或者查看Logs目录下的stdout/stderr日志,排查应用启动报错 - 手动把本地发布产物(
bin/Release/net6.0/publish目录)通过KUDU的Zip Push Deploy上传,验证是否能正常运行,排除部署工具的问题。
- 确认App Service运行时设置为
排查ASP.NET Identity相关问题:
- 确认发布时包含了Identity的迁移文件、UI组件静态资源
- 在本地Linux环境(比如Docker容器)运行发布产物,排查Linux特有的兼容性问题。
内容的提问来源于stack exchange,提问作者Goober

