Github Workflow部署Python应用到Azure时私有依赖SSH认证失败
解决Azure Oryx部署阶段SSH认证失败问题
问题根源
部署阶段Oryx在Azure App Service的服务器环境中执行依赖构建,而非GitHub Action的Runner环境,你在deploy阶段配置的SSH密钥无法传递到Oryx的运行环境中,导致拉取私有GitHub仓库时认证失败。
可行解决方案
方案1:打包已构建好的虚拟环境(推荐)
在GitHub Action的build阶段完成所有依赖安装,将包含已安装依赖的虚拟环境一起打包部署,让Azure跳过Oryx的重新构建流程:
- 修改build阶段的
Upload artifact步骤,取消排除venv目录:
- name: Upload artifact for deployment jobs uses: actions/upload-artifact@v2 with: name: python-app path: .
- 在Azure App Service的配置 > 应用设置中添加以下环境变量:
SCM_DO_BUILD_DURING_DEPLOYMENT = false:禁止Oryx在部署时自动构建PYTHONPATH = /home/site/wwwroot/venv/lib/python3.7/site-packages:指定Python依赖路径WEBSITE_VIRTUAL_APPLICATIONS = /:确保虚拟路径配置正确
方案2:改用HTTPS+GitHub PAT访问私有仓库
将requirements.txt中的SSH依赖地址替换为带GitHub个人访问令牌(PAT)的HTTPS地址,让Oryx能通过令牌认证拉取私有仓库:
在GitHub生成具有
repo权限的PAT,并存入Azure App Service的应用设置(比如命名为GITHUB_PAT)修改requirements.txt中的依赖地址:
-e git+https://${GITHUB_PAT}@github.com/Murphy-Hoffman/IBMi-MHC.git@57085a5e1f5637bfdd815397b45ba1b2dfd9b52c#egg=IBMi_MHC_db2&subdirectory=utility/db2 -e git+https://${GITHUB_PAT}@github.com/Murphy-Hoffman/IBMi-MHC.git@57085a5e1f5637bfdd815397b45ba1b2dfd9b52c#egg=IBMi_MHC_UNIT&subdirectory=IBMi/_UNIT
- 确保Azure App Service能识别环境变量,Oryx构建时会自动替换
${GITHUB_PAT}为实际令牌值
方案3:在Azure App Service中配置SSH密钥(复杂)
将SSH私钥存入App Service的应用设置,通过启动脚本配置SSH环境:
在Azure App Service的应用设置中添加
SSH_PRIVATE_KEY,值为你的私有密钥内容(注意格式要完整,包含-----BEGIN RSA PRIVATE KEY-----和-----END RSA PRIVATE KEY-----)在项目根目录创建
.deployment文件,内容如下:
[config] command = bash -c "echo '$SSH_PRIVATE_KEY' > /home/site/.ssh/id_rsa && chmod 600 /home/site/.ssh/id_rsa && ssh-keyscan github.com >> /home/site/.ssh/known_hosts && pip install -r requirements.txt"
这种方法需要确保App Service的运行环境支持SSH命令,且密钥权限配置正确,相对容易出问题,不推荐优先使用。
内容的提问来源于stack exchange,提问作者Austin Hill
相关产品推荐
相关产品推荐

