我正在尝试使用Azure DevOps YAML管道将一些Python函数部署到基于消费计划的Function App中。
尽管遵循这里找到的所有建议:https://learn.microsoft.com/en-us/azure/azure-functions/recover-python-functions?tabs=manual%2Cbash&pivots=python-mode-configuration#enable-remote-build
我仍然无法:(a)查看为什么项目根目录中的requirements.txt被忽略了;(b)找出为什么当我从APPLICATION_SETTINGS -> WEBSITE_RUN_FROM_PACKAGE变量提供的URL下载我的包时,实际上根本没有.python_packages目录。
尽管将SCM_DO_BUILD_DURING_DEPLOYMENT和ENABLE_ORYX_BUILD设置为True,但仍会出现这种情况。
经过几个小时的摸索,我最终发现了一个潜在的解决方案,那就是在DevOps管道中安装依赖项:
steps:
- task: UsePythonVersion@0
displayName: "Use Python 3.10"
inputs:
versionSpec: 3.10
- bash: |
pip install --target="./.python_packages/lib/site-packages" -r ./requirements.txt
workingDirectory: $(workingDirectory)
displayName: "Install application dependencies"
在此之前,创建和发布归档,然后AzureFunctionApp@2操作使用归档以部署它。
这是实现这一目标的正确方法吗?Python Functions文档似乎建议在构建过程中处理requirements.txt,但实际上并非如此。
我被困在试图理解这一步实际上是做什么。我说它正在将依赖项安装到DevOps代理上的Python示例中,只是为了代理自己的.python_packages文件夹,安装后,复制到然后部署的工件中,对吗?是这样吗?
从根本上说,我的问题是:有没有更好的办法?
谢谢你,谢谢
1条答案
按热度按时间u5rb5r591#
这是实现这一目标的正确方法吗?Python Functions文档似乎建议在构建过程中处理requirements.txt,但实际上并非如此。
是的,requirements.txt包需要安装在DevOps代理中,然后将包含包的构建工件部署到Function应用程序中,以便Function触发器工作。即使是部署Python函数的默认Azure DevOps yaml代码也有单独的pip安装步骤来安装包。参考如下:-
我已经使用了下面的模板,并选择了我的函数应用程序和路径设置为-
$(System.DefaultWorkingDirectory)
我的Azure DevOps yaml脚本:-
输出:-
所有包依赖项都在构建步骤中安装,其中Function在Azure DevOps代理上构建,如下所示:
这些软件包被存档为工件,如下所示:
然后,存档文件夹被发布为类似于下面的文件夹:
在下一阶段,这些发布的工件被下载并部署在函数应用程序中,如下所示:
以上方法是目前部署Function应用程序的理想且有效的方法。
func azure functionapp publish functionappname --python
并在同一构建步骤中安装了依赖项pip install
**。