使用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'
后续排查步骤
- 检查
requirements.txt,确认包含flask和gunicorn - 登录Web App的Kudu工具,查看
site/wwwroot目录:- 确认存在
startup.py、templates、static等应用文件 - 确认
.python_packages/lib/site-packages下有Flask和Gunicorn依赖
- 确认存在
- 查看Web App的日志流,检查启动命令是否有报错(比如模块找不到、端口占用等)
内容的提问来源于stack exchange,提问作者Asi
相关产品推荐
相关产品推荐

