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

使用Azure Pipelines部署Flask应用至Azure Web App仅显示默认页面

Flask应用Azure DevOps部署成功后仍显示默认页面问题

问题详情

  • Pipeline执行成功,但访问Azure Web App时仅显示平台默认页面
  • 操作依据微软官方文档,使用官方提供的Flask教程仓库
  • 为解决初始构建失败问题,修改后的YAML配置如下:
trigger:
- main

pool:
  vmImage: ubuntu-latest

stages:
  - stage: Deploy
    displayName: 'Deploy Stage'
    jobs:
      - job: DeploymentJob
        displayName: 'Deploy to Azure Web App'
        steps:
        - task: UsePythonVersion@0
          inputs:
              versionSpec: '3.9'
          displayName: 'Use Python 3.9'

        - script: |
              python -m venv antenv
              source antenv/bin/activate
              python -m pip install --upgrade pip
              pip install setup
              pip install --target="./.python_packages/lib/site-packages" -r ./requirements.txt
          workingDirectory: $(Build.SourcesDirectory)
          displayName: "Install requirements"

        - task: ArchiveFiles@2
          inputs:
            rootFolderOrFile: '$(Build.SourcesDirectory)'
            includeRootFolder: false
            archiveType: 'zip'
            archiveFile: '$(Build.SourcesDirectory)/$(Build.BuildId).zip'
            replaceExistingArchive: true
        - task: PublishPipelineArtifact@1
          inputs:
            targetPath: '$(Build.ArtifactStagingDirectory)'
            artifactName: 'drop'
            publishLocation: 'pipeline'
          
        - task: DownloadBuildArtifacts@1
          inputs:
            buildType: 'current'
            downloadType: 'single'
            artifactName: 'drop'
            downloadPath: '$(System.ArtifactsDirectory)'
        
        - task: AzureWebApp@1
          inputs:
            appType : 'webApp'
            azureSubscription: 'azure-cloud-exampele'
            appName: 'xyz'
            package: '$(Build.SourcesDirectory)/$(Build.BuildId).zip'
            startUpCommand: 'gunicorn --bind=0.0.0.0 --workers=4 startup:app'

问题原因及解决方案

1. 冗余的发布/下载步骤

你配置的PublishPipelineArtifact和DownloadBuildArtifacts完全多余:

  • 生成的zip文件存放在$(Build.SourcesDirectory),但发布任务的目标路径是$(Build.ArtifactStagingDirectory),这个目录里没有任何内容,相当于发布了空的工件
  • 后续的下载步骤也没有实际作用,最后部署用的还是原目录的zip,这部分步骤可以直接删除,避免混淆。

2. 不必要的pip install setup

setup不是标准Python包,这个命令大概率会报错(虽Pipeline显示成功,但可能被忽略),直接删除这一行。

3. Gunicorn依赖缺失风险

如果你的requirements.txt里没有包含gunicorn,启动命令会执行失败。要么在requirements中添加,要么在安装脚本里显式安装。

4. 归档路径优化

建议将生成的zip文件放在$(Build.ArtifactStagingDirectory),这是Pipeline中存放构建产物的标准目录,更符合规范。

修正后的YAML配置

trigger:
- main

pool:
  vmImage: ubuntu-latest

stages:
  - stage: Deploy
    displayName: 'Deploy Stage'
    jobs:
      - job: DeploymentJob
        displayName: 'Deploy to Azure Web App'
        steps:
        - task: UsePythonVersion@0
          inputs:
              versionSpec: '3.9'
          displayName: 'Use Python 3.9'

        - script: |
              python -m venv antenv
              source antenv/bin/activate
              python -m pip install --upgrade pip
              pip install --target="./.python_packages/lib/site-packages" -r ./requirements.txt
              # 确保gunicorn被安装,如果requirements.txt未包含则添加此行
              pip install --target="./.python_packages/lib/site-packages" gunicorn
          workingDirectory: $(Build.SourcesDirectory)
          displayName: "Install requirements"

        - task: ArchiveFiles@2
          inputs:
            rootFolderOrFile: '$(Build.SourcesDirectory)'
            includeRootFolder: false
            archiveType: 'zip'
            archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
            replaceExistingArchive: true
          displayName: 'Archive application files'
        
        - task: AzureWebApp@1
          inputs:
            appType : 'webApp'
            azureSubscription: 'azure-cloud-exampele'
            appName: 'xyz'
            package: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
            startUpCommand: 'gunicorn --bind=0.0.0.0 --workers=4 startup:app'
          displayName: 'Deploy to Azure Web App'

后续排查步骤

  1. 检查requirements.txt,确认包含flask和gunicorn
  2. 登录Web App的Kudu工具,查看site/wwwroot目录:
    • 确认存在startup.py、templates、static等应用文件
    • 确认.python_packages/lib/site-packages下有Flask和Gunicorn依赖
  3. 查看Web App的日志流,检查启动命令是否有报错(比如模块找不到、端口占用等)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:05:23