Объединение нескольких веб-проектов в один выходной zip-пакет

Я использую Visual Studio Online и работаю над созданием установки непрерывной интеграции. В моем сценарии требуется, чтобы несколько веб-проектов были встроены в одно развертывание службы приложений Azure. Загвоздка в том, что «из коробки» при создании новой сборки появляется задача сборки Visual Studio для создания отдельного zip-файла для каждого проекта в решении, а затем задача развертывания службы приложений Azure выдает ошибку о том, что есть более одного файла, соответствующего шаблону, то есть *.zip.

Что я хотел бы сделать, так это собрать все эти проекты в одном месте, объединить различные проекты вместе, а затем Azure App Service Deploy будет иметь только один zip-файл для отправки, и я знаю, что он отлично справляется. Мои аргументы MSBuild для задачи сборки Visual Studio: /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\\". Я попытался удалить атрибут PackageAsSingleFile, но он все равно создал zip-файлы.

Возможен ли сценарий, который я хочу реализовать, в VSO, возможно, с другим набором кодов команд?


person Ken McAndrew    schedule 18.09.2018    source источник
comment
Ну, они снова изменили название продукта, поэтому Visual Studio Online больше не действует. Если у вас есть несколько веб-проектов и вы хотите развернуть все вместе, я предлагаю использовать развертывание на основе Git, где вы можете легко организовать файлы в той структуре папок, которая вам нравится. Пакеты развертывания (на основе Web Deployment Tool) менее настраиваемые.   -  person Lex Li    schedule 18.09.2018
comment
У вас возникнут проблемы с этим - Visual Studio строится на основе одного проекта веб-приложения == одного zip-файла. Есть ли что-то, что мешает вам последовательно использовать несколько задач развертывания службы приложений для развертывания всех ZIP-артефактов?   -  person Daniel Mann    schedule 18.09.2018
comment
Большая проблема с несколькими задачами развертывания заключается в том, что мы говорим о количестве X проектов, где X будет меняться в течение всего процесса. Необходимость каждый раз добавлять новую задачу развертывания была бы более громоздкой; Я думаю, что есть способ лучше автоматизировать процесс.   -  person Ken McAndrew    schedule 18.09.2018


Ответы (1)


Похоже, вам нужен сценарий PowerShell или несколько задач для управления файлами и папками перед публикацией артефакта.

  1. Извлечение файлов с $(build.artifactstagingdirectory)\*.zip по $(build.artifactstagingdirectory)\Merged
  2. Архивировать файлы с $(build.artifactstagingdirectory)\Merged по $(build.artifactstagingdirectory)\Merged.zip
  3. Удалить файлы которые мы извлекли с помощью мини-соответствия: !/**/*.zip
  4. Измените развертывание службы приложений Azure, чтобы найти: $(System.DefaultWorkingDirectory)/**/Merged.zip

https://docs.microsoft.com/en-us/azure/devops/pipelines/build/variables?view=vsts

person Calidus    schedule 18.09.2018
comment
К сожалению, у меня возникают проблемы при извлечении, извлечение не удается при попытке извлечь archive.xml, но файл уже извлечен из предыдущего архива. Любые идеи? - person AltWouss; 09.10.2018
comment
У вас есть конфликт имен файлов? Это приводит к сбою Extract? - person Calidus; 09.10.2018
comment
Каждый zip-файл имеет свой собственный archive.Xml, и, к сожалению, задача извлечения файлов не имеет опции принудительного переопределения. Я работал над этим, написав сценарий powershell. Однако результирующее слияние развертывается не совсем корректно. Объединенные проекты сохраняют свои каталоги packageTmp и из-за этого находятся не в правильном месте. - person AltWouss; 09.10.2018