У меня есть приложение-функция, я хочу развернуть функции в этом приложении-функции.
Я создал конвейер CI и CD в Azure Devops, все это приводит к отсутствию функций в приложении-функции.
вот как выглядит мой CI yaml
trigger: none
pool:
vmImage: 'windows-latest'
steps:
- task: DotNetCoreCLI@2
inputs:
command: 'build'
projects: '*.csproj'
- task: DotNetCoreCLI@2
inputs:
command: publish
arguments: '--configuration Release --output publish_output'
projects: '*.csproj'
publishWebProjects: false
modifyOutputPath: false
zipAfterPublish: false
- task: ArchiveFiles@2
displayName: "Archive files"
inputs:
rootFolderOrFile: "$(System.DefaultWorkingDirectory)/publish_output"
includeRootFolder: false
archiveFile: "$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip"
- task: PublishPipelineArtifact@1
inputs:
targetPath: $(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip
artifactName: 'adofunc'
Я считаю, что проблема в артефакте. Я попытался загрузить этот артефакт и развернуть zip-архив с помощью az functionapp deployment source config-zip -g <resource_group> -n <app_name> --src <zip_file_path>
после установки SCM_DO_BUILD_DURING_DEPLOYMENT
в значение true, также не получилось никаких функций.
Я вручную настроил другое функциональное приложение с функциями, загрузил контент с портала и сравнил zip-архив, они сильно отличались.
Я пытался использовать PublishBuildArtifacts@1
вместо PublishPipelineArtifact@1
в конвейере, ничего не изменилось, все тот же старый сломанный почтовый индекс и без функций.
Тестирую ваш YAML-файл, на моей стороне он работает нормально. Я предполагаю, что это связано с вашим проектом или приложением-функцией. Поделитесь скриншотами, чтобы показать структуру папок вашего проекта и настройки приложения.
структура папок — это просто папка с .sln и приложением-функцией > папка приложения-функции с .cs и .csproj, настройки приложения — это настройки приложения по умолчанию
должен ли zip-архив содержать разные файлы .cs? потому что причина, по которой я думал, что проблема в почтовом индексе, заключается в том, что в нем нет ни одной функции. но там есть functionapp.deps.json
functionapp.dll
functionapp.exe
functionapp.pdb
functionapp.json
«Предполагается ли, что zip-архив будет содержать разные файлы .cs» — zip-архив не будет содержать файлы .cs. Там будет папка .azurefunctions
. Внутри него будут function.deps.json
, functionapp.dll
и т. д.
Судя по текущей ситуации, с вашим файлом yaml все в порядке. Чтобы узнать, связано ли это с вашим проектом. пожалуйста, создайте и опубликуйте свой проект на своем локальном компьютере, используя тот же CLI dotnet. Архивируйте папку publish_output
и разверните ее с помощью Azure CLI. Если при локальной сборке и развертывании возникает та же проблема, мы можем подтвердить, что с вашим проектом что-то связано. И тогда мы сможем сосредоточиться на этом.
Я сделал dotnet publish -c Release -o publish_output
. содержимое publish_output
, насколько я вижу, точно такое же, как и артефакт, который производит конвейер. Так что да, я тоже думаю, что с моим конвейером ci все в порядке. Я пытаюсь развернуть файл public_output.zip с помощью az functionapp deployment source config-zip -g <resource_group> -n <app_name> --src <zip_file_path>
, возвращается Getting scm site credentials for zip deployment Starting zip deployment. This operation can take a while to complete ... Deployment endpoint responded with status code 202
, и в моем приложении-функции ничего не происходит.
Проблема связана с самим вашим проектом. Как вы создали свой проект? Следите ли вы за официальным документом ?
Вы правы, с проектом что-то не так. Я все воссоздал и теперь вроде работает. Что странно, ведь раньше с этим проектом проблем не было. Только сейчас, когда я развертываю его в другой среде, он не работает. В любом случае, похоже, что с моим ci и cd все в порядке. Спасибо за указатели.
Привет, @nevermonday, приятно знать, что создание нового проекта решило проблему. Чтобы помочь другим столкнуться с подобной проблемой, я добавляю ответ ниже.
Основная причина и решение: Вопрос вызван самим вашим проектом. Следование официальному документу для создания нового проекта решает проблему.
В случае любой подобной проблемы вы можете создать и развернуть приложение-функцию локально, чтобы проверить, вызвана ли она вашим проектом или конвейером Azure.
Официальные документы для справки:
1. Добавьте задачу CmdLine@2 перед ArchiveFiles@2. В задаче запустите cd`publish_output` и
dir
, чтобы проверить, находятся ли ваши функции в папкеpublish_output
. 2. Вы также можете создать и опубликовать свой проект на своем локальном компьютере с помощью интерфейса командной строки dotnet. Архивируйте папкуpublish_output
и разверните ее с помощью Azure CLI. Тогда вы сможете узнать, связано ли это с вашим проектом.