Как автоматически развернуть содержимое приложения-функции с помощью проекта Resource Group в Visual Studio 2017? - PullRequest
0 голосов
/ 23 октября 2018

Существуют очень хорошие инструкции о том, как автоматизировать развертывание веб-приложений - как создание необходимой инфраструктуры, так и развертывание содержимого веб-приложения.Например, это очень хорошо описано здесь

Однако я не могу найти подробных инструкций о том, как это делается для приложения-функции.

Что такое мойcase:

  • Я использую развертывания шаблонов Azure RM с проектом группы ресурсов Visual Studio 2017
  • Я успешно определил шаблон функции
  • Я успешно определилшаблон веб-развертывания для функции
  • Я создал свою функцию в качестве отдельного проекта, и она работает правильно
  • В проекте группы ресурсов добавлена ​​ссылка на проект функции и еесвойства определены следующим образом: enter image description here

При развертывании группы ресурсов происходит сбой с сообщением «Целевой« пакет »не существует в проекте."

Это означает, что он не может создать пакет ZIP.

Все работает нормально, если я удаляю параметр" Package "из" Include Targets ", а затем вручнуюy поставьте «package.zip» в проект группы ресурсов.

Как настроить проект группы ресурсов, чтобы иметь возможность самостоятельной сборки пакета ZIP для проекта Function App?

Можно ли добавить цель "Package" в проект приложения Function?

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Мне удалось найти обходной путь, который на самом деле довольно элегантный и довольно простой.
Надеемся, что это поможет другим:
1. Установите пакет MSBuildTasks NuGet на проект приложения функции
2. Откройте, чтобы редактировать файл .csproj проекта приложения функции идобавить следующее где-то внутри элемента <Project>:

<Project>
  ...
  <Import Project="$(ProjectDir)obj\FunctionApp.csproj.nuget.g.targets" />
  <ItemGroup>
    <ProjectFiles Include="$(OutDir)\**\*.*" />
  </ItemGroup>
  <Target Name="Package">
    <Zip Files="@(ProjectFiles)" WorkingDirectory="$(OutDir)" ZipFileName="$(PackageLocation)" />
  </Target>

</Project>
Важными частями в верхнем фрагменте являются следующие.Они помогают связать цель с проектом группы ресурсов (см. Изображение в вопросе):
  • имя Target должно быть «Пакетом», которое вызывается проектом группы ресурсов
  • использование свойства $(PackageLocation), которое передается проектом группы ресурсов

Этот пост в блоге помог мне.

0 голосов
/ 24 октября 2018

Вы окажетесь в гораздо лучшем положении, если сразу начнете использовать Devure Azure и автоматизируете этот процесс с помощью конвейера CI / CD.

В прошлом я сделал несколько таких действий, разбив развертывание на три этапа (в моих проектах обычно есть логическое приложение, которое вызывает функцию):

  1. шаблон ARM, который содержит все содержимое группы ресурсов, кроме приложения логики.Сначала разверните его, используя задачу развертывания группы ресурсов
  2. . Используйте задачу развертывания службы приложения , чтобы опубликовать ZIP-файл, созданный в процессе сборки.Это создает конечную точку приложения функции, которая должна существовать до развертывания приложения логики
  3. Развертывание приложения логики из отдельного шаблона ARM с использованием другого шага развертывания группы ресурсов

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

Даже при простом развертывании приложения-функции я все равно приводил бы аргумент, что наличие конвейера CI / CD облегчит вашу жизнь в долгосрочной перспективе.

Блог Kloud только что добавил отличную статью о том, как это сделать .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...