Как автоматически развернуть содержимое приложения-функции с помощью проекта группы ресурсов в Visual Studio 2017?

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

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

Каков мой случай:

  • Я использую развертывания шаблона Azure RM с проектом группы ресурсов Visual Studio 2017.
  • Я успешно определил шаблон функции
  • Я успешно определил шаблон веб-развертывания для функции
  • Я создал свою функцию как отдельный проект, и она работает правильно
  • В проекте Resource Group добавлена ​​ссылка на проект Function, а его свойства определены следующим образом: введите здесь описание изображения

Когда я развертываю группу ресурсов, происходит сбой с сообщением "Целевой пакет не существует в проекте".

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

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

Как следует настроить проект группы ресурсов, чтобы можно было самостоятельно собрать ZIP-пакет для проекта приложения-функции?

Можно ли добавить цель "Пакет" в проект приложения-функции?

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


person Vladislav    schedule 23.10.2018    source источник


Ответы (3)


Мне удалось найти обходной путь, который на самом деле довольно элегантный и довольно простой.
Надеюсь, это поможет другим:
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>
  1. The important parts in the upper snippet are the following. They help bind the Target to the Resource Group project (see the image in the Question):
    • the name of the Target should be "Package", which is called by the Resource Group Project
    • использование свойства $(PackageLocation), которое передается проектом группы ресурсов

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

person Vladislav    schedule 24.10.2018
comment
большое спасибо. билась головой о стену за это. - person jlo-gmail; 28.05.2020

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

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

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

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

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

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

person Josh    schedule 23.10.2018
comment
интересные вещи упомянули, спасибо. Конечно, это дает другую перспективу, однако на данном этапе я не могу перенести проекты нашей компании таким образом. Моей главной заботой является создание ZIP-файла и передача его в проект группы ресурсов. Я на пути к поиску обходного пути. Как только я буду готов, я опубликую еще один ответ. Спасибо - person Vladislav; 24.10.2018

Основываясь на очень полезном ответе Владислава...

Ошибка в развертывании MSBuildTasks nuget не позволяет установить его, как описано на сайте проекта для проектов .Net Core. Папка .build никогда не создается.

Если вы добавите MSBuildTasks версии 1.4.0.128 в проект .Net Framework в решении, вы можете использовать импорт, как описано на сайте:

  <PropertyGroup>
    <MSBuildCommunityTasksPath>$(SolutionDir)\.build</MSBuildCommunityTasksPath>
  </PropertyGroup>

  <Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets" />
person jlo-gmail    schedule 28.05.2020