Azure DevOps и развертывание функций Azure: где находятся настройки моего приложения

Я пытаюсь загрузить базовую функцию Azure Dotnet в службу приложений, размещенную в Windows, и изо всех сил пытаюсь доказать, что она работает, или убедиться, что настройки верны.

У меня также есть стремление к тому, чтобы развертывание было полностью автоматизировано без необходимости проходить через портал Azure, настраивать параметры и т. Д.

Процесс сборки: сейчас он выглядит так ...

  1. Функция C # компилируется, и все модульные тесты проходят локально и в агентах сборки Azure DevOps.
  2. Сборка завершается, и создается zip-файл.
  3. Я оборачиваю zip-файл в пакет Nuget с версией
  4. Пакет Nuget размещен в репозитории Azure DevOps Artifacts

Так что на данный момент все выглядит хорошо.

Процесс выпуска

  1. Я восстанавливаю и распаковываю пакет nuget в агенте сборки Azure DevOps.
  2. Я подтверждаю, что zip-файл существует с помощью задачи Powershell - все в порядке.
  3. I then use the Azure DevOps Release pipeline task; "Azure Functions"
  4. I think I've configured this task correctly
    • Package or Folder: "The path I validated in step 2 above"
    • Метод развертывания: Zip Deploy (я чередовал это и развертывание пакета в разных выпусках)

Настройки приложения (см. Снимок экрана ниже)

  • пары имя-значение, например -Name "значение" -Name2 "value2" и т. д.
  • Я также включил -WEBSITE_RUN_FROM_PACKAGE «1» в список настроек приложения (я пробовал выпуски с этой настройкой и без нее)

Результаты

Релиз проходит, в журналах говорится, что он загрузил пакет и настройки приложения.

Однако когда я захожу на портал Azure:

  • Я не вижу настроек своего приложения, которые, как я думал, загрузил в выпуске.
  • Он сохраняет фиктивные настройки приложения, которые я добавил напрямую через портал Azure.

Вопросы

  • Should I create an empty Azure Function within the AppServive using the Azure Portal before I start the Release with this task?
    • The very first time I ran the release it failed because it said it couldn't find the slot I'd specified. I was under the impression that the Azure Function pipeline task would create everything but it appears that it expects there to be an empty function with slots predefined and maybe app settings predefined. Any thoughts please?
    • Должен ли я создавать настройки приложения на портале перед выпуском? Другими словами, задача конвейера разрешает только обновления существующих настроек приложения, созданного порталом.
  • Есть ли лучшая задача конвейера для использования - которая может создать новую функцию Azure, если она еще не существует?

Как это часто бывает со справочной документацией, информация, которую я видел, следует счастливому пути, а иногда и слишком много с большим количеством «если», «но» и, возможно, советов.

Любое руководство будет действительно признательно, поскольку я чувствую, что хожу здесь по кругу, и это должно быть просто.

Спасибо.

введите здесь описание изображения


person SJB    schedule 22.01.2020    source источник


Ответы (2)


Вы можете развернуть функцию Azure с помощью Azure-Resource -Manager Templates. Вы можете найти образцы на GitHub. На этом этапе вы создаете необходимую инфраструктуру в Azure перед развертыванием. В вашем случае функция Azure и план потребления. Таким образом, в вашем развертывании инфраструктура предоставляется на первом этапе, а затем в фактическом развертывании пакета для вашей функции.

Информацию об инфраструктуре см. На шаге Azure DevOps для Создание или обновление ресурса Группы.

Пример YAML для обоих шагов:

- task: AzureResourceGroupDeployment@2
  displayName: 'Create Or Update Resource Group'
  inputs:
    deploymentMode: 'Incremental'
    azureSubscription: 'Your-Subscription'
    resourceGroupName: '${{ parameters.resourceGroupName }}'
    location: '${{ parameters.location }}'
    csmFile: '${{ parameters.csmFile }}'
    csmParametersFile: '${{ parameters.csmParametersFile }}'

- task: AzureRmWebAppDeployment@4
  displayName: 'Azure App Service Deploy'
  inputs:
    azureSubscription: 'Your-Subscription'
    appType: functionApp
    WebAppName: '${{ parameters.function }}'
    packageForLinux: '$(Agent.BuildDirectory)/${{ parameters.dropfolder }}/$(Build.Repository.Name)-$(version)-$(Build.SourceBranchName)-$(Build.BuildNumber).zip'
person Brenner's Daniel    schedule 22.01.2020
comment
Вы также можете включить настройки для своей функции с помощью этих шаблонов. Затем они автоматически устанавливаются для увеличения при каждом развертывании. - person Brenner's Daniel; 22.01.2020
comment
Привет, спасибо за ответ, Даниэль, относительно использования шаблонов Azure ARM. Я понимаю, как это может работать, и мне нравятся шаблоны ARM для начальной подготовки. Однако обычно я считаю, что они очень быстро усложняются, когда вы начинаете добавлять больше ресурсов в RG. Я надеялся, что функциональная задача Azure станет быстрой победой в конвейере, позволяющей легко вводить переменные в AppSettings и автоматически обновлять их в Azure. Похоже, что они не обновляются, хотя в задаче конвейера ясно сказано, что это так. Может, мне просто нужно прибегнуть к Powershell. - person SJB; 22.01.2020
comment
@SJB Прежде чем вы начнете пытаться использовать шаблон ARM для управления настройками приложения функций Azure, вы должны знать о проблеме, которую я зарегистрировал на GitHub, и я все еще жду решения. В настоящее время развертывание шаблона ARM с настройками приложения удаляет все настройки приложения и заменяет их чем-либо в шаблоне ARM. Итак, если вы добавите что-нибудь между развертываниями, этого не будет. Если ваш шаблон ARM выполняет любую другую настройку параметров приложения, его больше нет. Это огромная заноза в заднице. ОСТОРОЖНО, github.com/Azure/azure-cli/issues/11718 - person Anthony Klotz; 22.01.2020
comment
Чтобы добавить к моему предыдущему комментарию, обходной путь, с которым я сейчас играю, - это просто развертывание ресурсов только с шаблоном ARM без настроек приложения. Затем я выполняю задачу конвейера выпуска, чтобы использовать Azure CLI для применения параметров приложения, поскольку команда AzureCLI не удаляет. Вместо этого он объединяет изменения, что является желаемым поведением, которое мне нужно. У меня был пост stackoverflow, в котором подробно описывалось мое преследование этой проблемы. stackoverflow.com/questions/59383303/ - person Anthony Klotz; 22.01.2020
comment
Спасибо за внимание, Энтони :-). Тогда я буду прибегать к задаче из командной строки ... Я просто надеялся, что задача Azure DevOps Release Pipeline будет самым быстрым и простым подходом. - person SJB; 23.01.2020

После того, как вы выполните сборку в конвейере Azure Devops, вы создадите пакет, из которого будет производиться выпуск. Вы должны убедиться, что содержимое этого пакета соответствует правильной структуре папок. Содержимое вашего приложения должно иметь следующую структуру в соответствии с Требования для непрерывного развертывания.

FunctionApp
 | - host.json
 | - MyFirstFunction
 | | - function.json
 | | - ...  
 | - MySecondFunction
 | | - function.json
 | | - ...  
 | - SharedCode
 | - bin

После сборки вы можете проверить содержимое сгенерированного пакета, перейдя к сводке для этой конкретной сборки и щелкнув опубликованный артефакт. Там вы можете скачать содержимое и убедиться, что оно имеет следующую структуру и содержание:

 | - host.json
 | - MyFirstFunction
 | | - function.json
 | | - ...  
 | - MySecondFunction
 | | - function.json
 | | - ...  
 | - SharedCode (might not be there)
 | - bin

После развертывания вы можете просматривать развернутые файлы через Kudu с помощью CMD или консоли отладки Powershell. Если вы выбрали запуск из пакета, вы можете увидеть используемый пакет в /data/SitePackages/. Packagename.txt указывает на последний использованный пакет. Содержимое пакета извлекается в /site/wwwroot/. Там вы должны увидеть как минимум папку host.json, bin и папки, содержащие ваши функции. Ничего больше. Содержимое приложения-функции не следует развертывать в подпапке /site/wwwroot/, например, /site/wwwroot/FunctionApp/.

Если содержимое и структура папок в wwwroot неверны, вы все равно можете увидеть успешное развертывание, ваше приложение-функция отображается, но функции не отображаются.

person iikkoo    schedule 19.02.2020