GitHub Action复用工作流:Azure部署避免重复pip install
解决GitHub Actions中Deploy复用Build依赖的问题
要避免Deploy阶段重复执行pip install,核心是把Build阶段已安装好依赖的虚拟环境(venv)一起打包为Artifact,在Deploy阶段直接复用,具体修改如下:
1. 调整Build阶段的Artifact上传规则
原配置排除了venv/目录,现在需要保留该目录,确保已安装的依赖能被传递到Deploy阶段:
- name: Upload artifact for deployment jobs uses: actions/upload-artifact@v2 with: name: python-app path: . # 直接上传整个项目目录,包含venv
2. 在Deploy阶段激活虚拟环境
下载Artifact后,激活Build阶段创建的虚拟环境,让后续部署流程直接使用已安装的依赖:
- name: Download artifact from build job uses: actions/download-artifact@v2 with: name: python-app path: . - name: Activate virtual environment run: | source venv/bin/activate # 可选:验证依赖状态,比如执行 pip list 确认已安装包 - name: 'Deploy to Azure Web App' uses: azure/webapps-deploy@v2 id: deploy-to-webapp with: app-name: 'project-prod' slot-name: 'Production' publish-profile: ${{ secrets.somesecrethere }}
修改后的完整配置
build: runs-on: ubuntu-latest needs: create-envfile steps: - uses: actions/checkout@v2 - name: Set up Python version uses: actions/setup-python@v1 with: python-version: '3.8' - name: Create and start virtual environment run: | python -m venv venv source venv/bin/activate - name: Install dependencies run: | eval `ssh-agent -s` cat ./.github/workflows/id_rsa | ssh-add - pip install -r requirements.txt - name: Upload artifact for deployment jobs uses: actions/upload-artifact@v2 with: name: python-app path: . deploy: runs-on: ubuntu-latest needs: build environment: name: 'Production' url: ${{ steps.somesecret }} steps: - name: Download artifact from build job uses: actions/download-artifact@v2 with: name: python-app path: . - name: Activate virtual environment run: | source venv/bin/activate - name: 'Deploy to Azure Web App' uses: azure/webapps-deploy@v2 id: deploy-to-webapp with: app-name: 'project-prod' slot-name: 'Production' publish-profile: ${{ secrets.somesecrethere }}
补充优化(可选)
如果Azure Web App部署流程默认会自动触发pip install,可以在项目根目录添加.deployment文件,指定使用虚拟环境的Python解释器,示例内容如下:
[config] command = source venv/bin/activate && gunicorn --bind=0.0.0.0 --workers=4 app:app
(请根据你的项目实际启动命令调整)
内容的提问来源于stack exchange,提问作者ira
相关产品推荐
相关产品推荐

