#.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