如何在Azure函数应用中使用私有GitHub Python包?
问题描述
我有一个私有GitHub包,本地Azure函数应用中可以通过以下命令安装:
pip install git+https://git@github.com/org-name/package-name.git
本地运行func start一切正常,但执行发布命令:
func azure functionapp publish "app" --python
后,pip安装步骤失败,报错如下:
Running command git clone -q 'ssh://****@github.com/org-name/package-name' /tmp/pip-req-build-7f2uwfvf Host key verification failed. fatal: Could not read from remote repository.
已知是远程构建未指定凭证导致的问题,但不想在requirements.txt中硬编码个人访问令牌(PAT),求其他解决方案。
解决方案
以下几种方案可避免硬编码凭证,实现Azure函数远程构建时安装私有GitHub包:
1. 用Azure应用程序设置存储PAT,通过环境变量引用
- 登录Azure门户,找到目标函数应用,进入配置 > 应用程序设置,添加新设置(比如命名为
GITHUB_PAT),值填入具备私有仓库读取权限的GitHub个人访问令牌。 - 修改
requirements.txt,通过环境变量引用PAT:
Azure函数构建时会自动读取应用程序设置中的环境变量,无需将PAT硬编码到代码中。git+https://${GITHUB_PAT}@github.com/org-name/package-name.git
2. 配置Azure函数与GitHub的部署集成
- 在Azure门户的函数应用中,进入部署中心 > 设置,选择GitHub作为源代码管理并完成授权。此时Azure会获得访问你GitHub私有仓库的权限,构建过程可直接拉取私有包。
- 这种方式下,
requirements.txt中直接写原始私有仓库地址即可,无需携带凭证,Azure会通过已授权的连接访问仓库。
3. 提前构建依赖包,上传到Azure存储后从存储安装
- 本地环境中将私有GitHub包打包成
.whl文件:pip wheel git+https://git@github.com/org-name/package-name.git -w ./wheels - 将
wheels文件夹中的.whl文件上传到Azure Blob存储容器(设置为私有访问)。 - 在
requirements.txt中指定从Azure存储URL安装,同时通过Azure应用程序设置存储存储账户的SAS令牌,用环境变量引用:
该方式完全避开GitHub凭证传递,依赖包从自有Azure存储获取。https://${STORAGE_ACCOUNT_NAME}.blob.core.windows.net/wheels/package-name-xxx.whl?${STORAGE_SAS_TOKEN}
4. 使用Azure DevOps Pipeline完成构建部署
- 创建Azure DevOps Pipeline,在流水线中配置GitHub服务连接(授权访问私有仓库)。
- 在流水线步骤中,先拉取私有GitHub包并安装到函数应用依赖目录,再部署到Azure函数。
- 此方案由DevOps Pipeline处理凭证,函数应用本身无需存储敏感信息,适合团队协作场景。
内容的提问来源于stack exchange,提问作者RogerKint
相关产品推荐
相关产品推荐

