我在使用 CI/CD 和 GitHub Actions 将 Python Web 应用程序部署到 Azure 应用服务时遇到问题。目标是让应用程序连接到 Azure SQL 后端进行查询,但部署未按预期工作。
我尝试通过操作从我的 GitHub 目录部署它,并且我添加了一个秘密 secrets.AZURE_WEBAPP_PUBLISH_PROFILE 以及 Azure 应用服务发布配置文件中的内容。
我的GitHub仓库的结构如下:
/python-app$
.
├── app
│ ├── app.py
│ ├── requirements.txt
│ ├── static
│ │ └── styles.css
│ └── templates
│ ├── index.html
│ └── welcome.html
├── terraform-infra
这是我创建的管道
name: Build and Deploy Python App to Azure Web App
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.12'
- name: Install unixodbc
run: sudo apt-get install -y unixodbc
- name: Create and activate virtual environment
run: |
python -m venv venv
source venv/bin/activate
- name: Install dependencies
run: pip install -r app/requirements.txt
- name: Compress artifact for deployment
run: zip release.zip ./app/* -r
- name: Upload artifact for deployment jobs
uses: actions/upload-artifact@v4
with:
name: python-app
path: |
release.zip
!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@v4
with:
name: python-app
- name: Unzip artifact for deployment
run: |
unzip release.zip
mv app/* .
- name: 'Deploy to Azure Web App'
uses: azure/webapps-deploy@v3
id: deploy-to-webapp
with:
app-name: 'python-app-mario'
slot-name: 'production'
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
需求.txt
bcrypt==4.2.0
blinker==1.8.2
click==8.1.7
Flask==3.0.3
itsdangerous==2.2.0
Jinja2==3.1.4
MarkupSafe==2.1.5
pyodbc==5.1.0
Werkzeug==3.0.4
app.py
database = os.getenv("database")
password = os.getenv("password")
server = os.getenv("server")
user = os.getenv("user")
driver= '{ODBC Driver 17 for SQL Server}'
# Connecting to SQL server
conexion = pyodbc.connect(f"DRIVER={driver};SERVER={server};DATABASE={database};UID={user};PWD={password}")
部署管道后,当我尝试访问应用程序时,我看到以下错误消息:
: ( Application Error If you are the application administrator, you can access the diagnostic resources.
此外,logs显示以下error,表明未找到pyodbc模块。但是,我已将其添加到requirements.txt文件中,并按照该文件安装了其依赖项。
我一直在寻找有关此问题的信息,但不确定如何解决它。
非常感谢您的宝贵时间!
正如上一条消息中提到的,我尝试安装 pyodbc 模块和 unixodbc 依赖项,但仍然遇到相同的错误。
我也尝试过使用Azure提供的管道,但也失败了。我一直在官方文档中寻找有关此错误的信息以及如何解决它,但我一直无法解决该问题。
错误表明没有找到依赖。这很可能是由于 zip 文件缺少依赖项,您可以通过在本地解压 zip 文件来验证这一点。
要解决此问题,您应该做的是在安装 requests.txt 文件中的所有内容时提供
--target <dir>
标志。这样依赖项将在压缩之前安装在项目根目录中。这是一个根据官方文档建模的示例:
- name: Create virtual environment
run: |
python -m venv venv
- name: Install dependencies
run: |
source venv/bin/activate
cd app
pip install -r requirements.txt \
target="./.python_packages/lib/site-packages"
注意:virtualenv 目录应该在源代码目录(即 app)之外创建,以避免 zip 文件膨胀。激活 virtualenv 应该在运行 pip 命令的同一步骤中完成,venv shell 将在 y 结束时关闭
您还可以使用
working-directory
参数来避免更改目录:
- name: Create virtual environment
run: |
python -m venv ${GITHUB_WORKSPACE}/env
- name: Install dependencies
run: |
source ${GITHUB_WORKSPACE}venv/bin/activate
pip install -r requirements.txt \ target="./.python_packages/lib/site-packages"
working-directory: ./app