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

通过GitHub Actions部署子目录到Azure Web App时未检测到框架

解决GitHub Actions部署Flask子目录到Azure Web App时框架未检测到的问题

核心问题是:GitHub Actions部署后,Azure Web App的site/wwwroot目录下是backend/子目录(Flask代码在这个子目录里),而Azure的Oryx构建工具只会在wwwroot根目录扫描requirements.txt等文件识别框架,因此无法检测到Flask,只能使用默认站点。而手动部署时你选择了backend文件夹,相当于直接把backend内的文件传到wwwroot根目录,所以能正常识别。

以下是具体解决思路:

方案1:修正Artifact上传/下载路径(最直接)

调整工作流的artifact处理逻辑,确保Flask代码直接部署到wwwroot根目录:

1. 修改构建阶段的上传步骤

原来的上传逻辑会把整个backend目录作为artifact内容,改成在backend工作目录下上传所有文件(排除venv):

- name: Upload artifact for deployment jobs
  uses: actions/upload-artifact@v3
  with:
    working-directory: "backend/"
    name: python-app
    path: |
      ./*  # 上传backend下的所有文件,而非backend目录本身
      !venv/

2. 修改部署阶段的下载步骤

将artifact下载到当前目录,确保部署时文件直接放到wwwroot根目录:

- name: Download artifact from build job
  uses: actions/download-artifact@v3
  with:
    name: python-app
    path: ./  # 下载到当前目录,对应后续部署的根路径

修改后的完整工作流示例:

name: Build and deploy Python app to Azure Web App - xxxxxxxxxxxxxxxx

on:
  push:
    branches:
      - main
  workflow_dispatch:

jobs:

  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Set up Python version
        uses: actions/setup-python@v5
        with:
          python-version: '3.11'

      - name: Create and start virtual environment
        run: |
          python -m venv venv
          source venv/bin/activate
        working-directory: "backend/"
      
      - name: Install dependencies
        run: pip install -r requirements.txt
        working-directory: "backend/"
        
      # Optional: Add step to run tests here (PyTest, Django test suites, etc.)
      
      - name: Upload artifact for deployment jobs
        uses: actions/upload-artifact@v3
        with:
          working-directory: "backend/"
          name: python-app
          path: |
            ./*
            !venv/

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

    steps:
      - name: Download artifact from build job
        uses: actions/download-artifact@v3
        with:
          name: python-app
          path: ./
          
      - name: 'Deploy to Azure Web App'
        uses: azure/webapps-deploy@v2
        id: deploy-to-webapp
        with:
          app-name: 'xxxxxxxxxxxxxxxx'
          slot-name: 'Production'
          publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_xxxxxxxxxxxxxxxxxxxxxxxxxxx }}

方案2:指定Azure的项目路径(备选)

如果不想修改artifact路径,可以通过Azure应用设置告诉Oryx工具去backend子目录找代码:

  • 登录Azure门户,进入目标Web App
  • 进入「配置」→「应用程序设置」
  • 添加新设置:
    • 名称:PROJECT
    • 值:backend
  • 保存设置后重新触发GitHub Actions部署

这个设置会让Oryx在site/wwwroot/backend目录下扫描框架相关文件,和手动部署逻辑一致。

方案3:手动指定启动命令

如果以上方案无效,可直接跳过框架检测,指定启动命令:

  • 在Azure门户的Web App「配置」→「常规设置」中,找到「启动命令」
  • 输入:gunicorn app:app(根据你的Flask入口调整,比如入口是application.py就写gunicorn application:app)
  • 保存后重新部署

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 08:18:16