Развертывание веб-приложения Azure с использованием kudu ZipDeploy завершается с ошибкой из-за структуры ZIP

#.net #azure #deployment #msbuild #kudu

#.net #azure #развертывание #msbuild #kudu

Вопрос:

Я пытаюсь обновить процесс развертывания для сайта .NET Framework до веб-приложения Azure. Ранее мы использовали Publish-AzureWebsiteProject командлет PowerShell, но он постепенно прекращается. Итак, мы пытаемся использовать функциональность kudu zipdeploy с помощью недавно выпущенного Publish-AzWebApp командлета PowerShell. Все работает отлично, что касается доставки файлов в Azure, но ужасно не удается распаковать ZIP в правильное местоположение.

Когда я создаю сайт, используя целевой «Пакет» на нашем сервере сборки, он создает ZIP-файл, структурированный для использования с MSDeploy. Это не формат, ожидаемый методом zipdeploy. ZIP-файл MSDeploy содержит XML-файл развертывания, а фактическое содержимое глубоко вложено в путь, представляющий исходное местоположение. Zipdeploy, похоже, хочет простой архив содержимого корневого каталога веб-сайта и поэтому копирует файлы из архива в буквальный путь после извлечения.

Так, например, если мое решение Visual Studio включено, d:buildssolution тогда файлы сборки для упаковки помещаются d:buildssolutionprojectobjdebugPackagePackageTemp . Содержимое сайта отправляется в ZIP по следующему пути D_CbuildssolutionprojectobjdebugPackagePackageTempContent . В результате при запуске zipdeploy содержимое помещается в веб-приложение по адресу wwwroot/Content/D_C/builds/solution/project/obj/debug/Package/PackageTemp/Content/ .

Команда, которую я запускаю для создания проекта, является:

 msbuild.exe /nologo /v:minimal /T:Package /p:Configuration="Debug;VisualStudioVersion=12.0" project.csproj
  

Я надеюсь, что кто-нибудь знает, как я могу добиться этого с помощью одного из следующих (предпочтительный порядок):

  • аргумент msbuild для сборки сайта и создания простого почтового индекса содержимого
  • параметр kudu, который будет развертывать текущий ZIP-файл с использованием msdeploy вместо прямой копии
  • пользовательский сценарий развертывания kudu, который будет развертываться через msdeploy вместо копирования файла
  • целевая настройка msbuild, которая создаст совместимый ZIP

Ответ №1:

Я понимаю, что это старый пост, но у меня также была эта проблема с использованием Powershell для быстрого развертывания функций Azure. В моем случае существующие функции Azure были удалены, но новые не были созданы. Я использовал Compress-Archive для создания пакета развертывания. Если бы я создал пакет с помощью 7Zip, вместо этого он работал нормально. Это было в Powershell версии 5.1.18362.752

Запуск того же кода в Powershell 7.0.3 сработал нормально. Я не пробовал PowerShell 6. Вот фрагмент кода:

 $files = Get-ChildItem -Path $path -Exclude $exclude
# check the powershell version because v5.1 has a Compress-Archive that won't deploy to Azure
if($PSVersionTable.PSVersion.Major -lt 7){
    Write-Host -ForegroundColor Red "Incompatible PowerShell version."
    return
}
# compress
Compress-Archive -Path $files -DestinationPath $publish_archive -CompressionLevel Optimal

$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization", ("Basic {0}" -f $base64AuthInfo))
$headers.Add("Content-Type", "application/zip")

$ret = Invoke-RestMethod -Method Post -Headers $headers -Uri $url -InFile $publish_archive
  

$publish_archive — это ПОЛНЫЙ путь к zip-файлу (не относительный путь)

Комментарии:

1. Старое, но все еще актуальное. В основном мы перешли на Azure DevOps, но все еще есть несколько заданий, выполняемых на экземпляре Jenkins. Я обязательно попробую это.

Ответ №2:

Я понимаю, что вы пытаетесь выполнить конвейер CI CD для развертывания веб-приложения в Azure Web apps.

Приведенный ниже URL-адрес поможет вам в развертывании Zip

https://learn.microsoft.com/en-us/azure/app-service/deploy-zip

Примечание: MSBUILD Zip может работать не во всех моделях развертывания

Zip config MSBuild.exe /p:конфигурация=»release»;платформа=»any cpu»;WebPublishMethod=Package;PackageFileName=»MyFolderpackage.zip»;DesktopBuildPackageLocation=»MyFolderpackage.zip»;PackageAsSingleFile=true;PackageLocation=»MyFolderpackage.zip»;DeployOnBuild=true;DeployTarget=Package

Комментарии:

1. Спасибо за отзыв. Я прочитал этот URL, и это полезно, но не решает мою конкретную проблему. К сожалению, я фактически столкнулся со структурой ZIP для этого метода развертывания.

2. Можете ли вы сказать мне, что такое ваш инструмент CI CD pipeline?

3. Дженкинс 1.5, мы используем задачу MSBuild и сценарий powershell для развертывания пакета.

4. используя задачу MSBuild, не заархивируйте файлы, вместо этого выполните другой шаг для сжатия файла с помощью «Compress-Archive». пожалуйста, следуйте согласно learn.microsoft.com/en-us/azure/app-service/deploy-zip . примечание: существует ограничение на размер пакета

5. Да, это один из методов, который я хотел использовать. Одна из проблем, с которой я столкнулся, заключается в том, что артефакты, сгенерированные с использованием вышеуказанной конфигурации сборки, не применяются автоматически .config преобразования. Поэтому я думаю, что мне нужно было бы сделать 1) сборку; 2) применить преобразования и / или «развернуть в каталог»; 3) ЗААРХИВИРОВАТЬ вывод; 4) развернуть в Azure