Не удалось найти модуль после попытки установить пользовательское колесо с помощью 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шаг в конвейере.

AzureCLI@2 :

Это не совсем тот способ, которым я хотел решить эту проблему, потому что мне все еще нужно включить требования общего кода в корень. requirements.txtтакже.

Переключение задачи AzureFunctionApp@1к AzureCLI@2дает мне больше обратной связи в конвейере. Результат должен быть таким же.

Другие вопросы по тегам