如何在Azure Release Pipeline中使用Python虚拟环境运行Alembic迁移
Azure Pipelines 处理Python虚拟环境及Alembic迁移的最佳实践
优先方案:复用构建流水线生成的虚拟环境
300MB的虚拟环境在Azure DevOps的构件体系中完全属于可接受范围,压缩后传输效率远高于重新安装依赖,操作步骤如下:
- 构建流水线末尾新增虚拟环境压缩步骤,避免大量小文件传输的性能损耗:
- Windows代理执行:
Compress-Archive -Path ./venv -DestinationPath ./venv.zip - Linux/macOS代理执行:
tar -zcf venv.tar.gz ./venv
- Windows代理执行:
- 将压缩后的虚拟环境包、
alembic目录、依赖声明文件一起作为流水线构件发布 - 发布流水线下载构件后,先解压虚拟环境再执行迁移脚本,Windows示例:
Linux/macOS示例:Expand-Archive -Path ./venv.zip -DestinationPath ./ CALL activate ./venv cd alembic alembic upgrade headtar -zxf venv.tar.gz source ./venv/bin/activate cd alembic alembic upgrade head
注意:该方案仅适用于构建和发布流水线使用相同操作系统代理的场景,跨操作系统的虚拟环境不可直接复用。
备选方案:发布流水线缓存式重建虚拟环境(适配跨平台场景)
如果构建和发布代理操作系统不一致,可通过依赖缓存实现接近复用构件的效率,无需从零安装依赖:
- 发布流水线先添加Python版本安装任务,指定和项目兼容的Python版本,和构建流水线使用的Python版本保持一致
- 添加
Cache任务,缓存路径设为虚拟环境的生成路径,缓存Key设置为"python | $(Agent.OS) | requirements.txt",只要依赖文件没有变更,就会直接命中缓存跳过依赖安装步骤 - 仅当缓存未命中时,执行
python -m venv ./venv和pip install -r requirements.txt命令创建虚拟环境,正常场景下缓存命中后仅需数秒即可获取可用的虚拟环境
迁移脚本优化建议
- 使用Azure DevOps内置变量(如
$(System.DefaultWorkingDirectory))定位文件路径,避免硬编码路径导致的执行错误 - 执行
alembic upgrade head前可新增alembic current命令打印当前数据库迁移版本,方便故障排查
内容的提问来源于stack exchange,提问作者Marc Youcef
相关产品推荐
相关产品推荐

