Не удалось найти модуль после попытки установить пользовательское колесо с помощью POST_BUILD_COMMAND в задаче Zip Deploy для приложения-функции Python в Azure.
вступление
Мой сценарий заключается в том, что я хочу повторно использовать общий код из репозитория в Azure DevOps в нескольких проектах. Я построил конвейер, который производит
wheel
как артефакт, поэтому я могу загрузить его в другие конвейеры.
Ситуация
В настоящее время я успешно настроил конвейер, который развертывает приложение функции Python. Приложение работает нормально и стабильно. я использую
SCM_DO_BUILD_DURING_DEPLOYMENT=1
а также
ENABLE_ORYX_BUILD=1
для достижения этой цели.
Теперь я нахожусь в том положении, когда хочу использовать артефакт (колесо Python/pip), как упоминалось во введении. Я добавил шаг в конвейер, и мне удалось успешно загрузить артефакт. Следующим шагом является обеспечение того, чтобы артефакт был установлен во время моего
Python Function App
Zip Deployment
. И вот тут я застрял.
Структура моего почтового индекса выглядит так:
__app__
| - MyFirstFunction
| | - __init__.py
| | - function.json
| | - example.py
| - MySecondFunction
| | - __init__.py
| | - function.json
| - wheels
| | - my_wheel-20201014.10-py3-none-any.whl <<< this is my wheel
| - host.json
| - requirements.txt
Проблема
Я пытался добавить такие команды, как
POST_BUILD_COMMAND
а также
PRE_BUILD_COMMAND
чтобы получить pip, установите колесо, но кажется, что пакет не найден (от Oryx/Kudu), когда я использую команду:
-POST_BUILD_COMMAND "python -m pip install --find-links=home/site/wwwroot/wheels my_wheel"
Azure DevOps не выдает никаких исключений или сообщений об ошибках. Просто, когда я выполняю функцию, я получаю исключение, говорящее:
Failure Exception: ModuleNotFoundError: No module named 'my_wheel'.
Мой вопрос заключается в том, как я могу изменить свое решение, чтобы убедиться, что сборка способна правильно установить my_wheel.
Боковое примечание. К сожалению, я не могу использовать канал Artifacts от Azure DevOps, чтобы опубликовать my_wheel и позволить pip использовать этот канал.
2 ответа
Вот как мое пользовательское колесо работает локально в коде VS:
Перейдите к своему DevOps, отредактируйте конвейер
YAML
файл, добавьте скрипт python, чтобы указать файл колеса для установки:
pip install my_wheel-20201014.10-py3-none-any.whl
Как это:
Включите журнал службы приложений и перейдите к Log Stream , чтобы узнать, работает ли он в Azure.
Я решил свою проблему, проверив репозиторий моего общего кода и включив общий код в пакет приложения-функции.
Также я заменил задачу на задачу и развернул приложение-функцию с помощью
az functionapp deployment source config-zip
команда. Задаю настройки приложения через отдельный
AzureAppServiceSettings@1
шаг в конвейере.
Это не совсем тот способ, которым я хотел решить эту проблему, потому что мне все еще нужно включить требования общего кода в корень.
requirements.txt
также.
Переключение задачи
AzureFunctionApp@1
к
AzureCLI@2
дает мне больше обратной связи в конвейере. Результат должен быть таким же.