Какие параметры мне нужно передать скрипту PowerShell PackageWeb для его развертывания на моей удаленной машине

Тем не менее, я возлюсь с миром MSBuild-/MSDeploy и в последнее время слишком часто чешу голову.

Я хочу иметь возможность создать проект веб-приложения только один раз и развернуть его в нескольких конфигурациях. Я нашел это PackageWeb-решение от Sayed I. Hashimi, которое позволяет вам добавить Nuget-пакет в ваш WAP, который добавит дополнительные файлы в сгенерированный WebDeploy-пакет. (Вы можете взглянуть на это 5-минутное видео, чтобы понять основы того, о чем этот пост.) Эти файлы позволяют мне выбрать желаемую конфигурацию во время (ну, на самом деле, прямо перед;-)) публикации; таким образом, я могу выбрать в своем процессе публикации, какой web.config-Transform мне нужен, и "специальный" (powershell-) скрипт, который поставляется с этим Nuget-Package, делает чудеса и публикует проект именно с этим преобразованием.

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

1. Первая попытка: локальное развертывание

Когда я пробую это локально, это работает. Параметры, которые я передаю для этого:

  • Преобразование я хочу опубликовать
  • Имя веб-приложения IIS
  • Имя компьютера
  • имя пользователя
  • пароль
  • Разрешить ненадежный сертификат
  • что, если

Поэтому я выбираю желаемую трансформацию и устанавливаю

  • Имя веб-приложения IIS: DeployApp/DeployThis (DeployApp - это сайт в моем IIS, а DeployThis - фактическое приложение, работающее на этом сайте)
  • Имя компьютера: localhost
  • Имя пользователя: someName
  • Пароль: угадай
  • Разрешить ненадежный сертификат: есть
  • whatif: ложь

И в конце сценария я вижу это приводит к следующей команде:

"C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe"
    -verb:sync 
    -source:archiveDir="C:\Users\someName\AppData\Local\Temp\DeployDBVariantion00_zip" 
    -dest:auto,includeAcls='False',Username=someName,Password=guesswhat,AuthType='NTLM' 
    -disableLink:AppPoolExtension
    -disableLink:ContentExtension 
    -disableLink:CertificateExtension
    -setParamFile:"C:\Users\someName\AppData\Local\Temp\DeployDBVariantion00_zip\SetParameters.xml"  
    -skip:objectName=dirPath,absolutePath="_Deploy_" 
    -skip:objectName=filePath,absolutePath=web\..*\.config 
    -skip:objectName=dirPath,absolutePath=_Package 
    -skip:objectName=filePath,absolutePath=.*\.wpp\.targets$ -allowUntrusted

И это разворачивается! Никаких ошибок, никаких предупреждений, просто удовольствие от локального развертывания:).

2. Вторая попытка: удаленное развертывание

Теперь трудная часть: я пытаюсь развернуть на удаленной машине, которую я настроил в VirtualBox.

Итак, теоретически я должен быть в состоянии выполнить то же действие на удаленном компьютере, если я просто применю необходимые адаптации к

  • Имя веб-приложения IIS
  • Имя компьютера
  • имя пользователя
  • Пароль, чтобы он соответствовал окружающей среде назначения. (Разумеется, учитывая, что на этом удаленном компьютере установлены правильные разрешения учетной записи и установки служб)

Поэтому я изменил эти 4 значения на

  • Имя веб-приложения IIS: DeployApp / DeployThis (структура IIS в этом случае настраивается так же, как и мой локальный компьютер)
  • Имя компьютера: 172.16.200.13
  • Имя пользователя: someOtherName
  • Пароль: haveAnotherGuess

И в конце скрипта я вижу, что это приводит к этой немного другой команде:

"C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe"
    -verb:sync -source:archiveDir="C:\Users\someName\AppData\Local\Temp\DeployDBVariantion00_zip" 
    -dest:auto,includeAcls='False',ComputerName='172.16.200.13?site=DeployApp/DeployThis',Username=someOtherName,Password=haveAnotherGuess,AuthType='BASIC'
    -disableLink:AppPoolExtension
    -disableLink:ContentExtension
    -disableLink:CertificateExtension
    -setParamFile:"C:\Users\someName\AppData\Local\Temp\DeployDBVariantion00_zip\SetParameters.xml" 
    -skip:objectName=dirPath,absolutePath="_Deploy_"
    -skip:objectName=filePath,absolutePath=web\..*\.config
    -skip:objectName=dirPath,absolutePath=_Package
    -skip:objectName=filePath,absolutePath=.*\.wpp\.targets$
    -allowUntrusted

И выходит с сообщением:

Could not connect to the remote computer ("Some.IP.-.Address")
On the remote computer, make sure that Web Deploy is installed and that the required process ("Web Management Service") is started.
Learn more at: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_DESTINATION_NOT_REACHABLE.)

Именно это заставило меня поверить, что у меня возникла какая-то проблема с настройкой моей виртуальной машины, и опубликовать этот вопрос.

3. Третья попытка - еще одно сообщение об ошибке, УРА это не та же ошибка

Поэтому я немного покопался и обнаружил, что для удаленного развертывания недостаточно просто указать имя компьютера в качестве IP-адреса вашей цели в этом сценарии, мне пришлось предоставить адрес службы назначения, выполняющей работу, поэтому я изменил свой настройки имени компьютера от попытки 2 до

  • Имя компьютера: https://172.16.200.13:8172/msdeploy.axd

На этот раз сгенерированная команда выглядит так:

"C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe"
    -verb:sync
    -source:archiveDir="C:\Users\someName\AppData\Local\Temp\DeployDBVariantion00_zip" 
    -dest:auto,includeAcls='False',ComputerName='https://172.16.200.13:8172/msdeploy.axd?site=DeployApp/DeployThis',Username=someOtherName,Password=haveAnotherGuess,AuthType='BASIC'
    -disableLink:AppPoolExtension
    -disableLink:ContentExtension
    -disableLink:CertificateExtension
    -setParamFile:"C:\Users\someName\AppData\Local\Temp\DeployDBVariantion00_zip\SetParameters.xml"
    -skip:objectName=dirPath,absolutePath="_Deploy_"
    -skip:objectName=filePath,absolutePath=web\..*\.config
    -skip:objectName=dirPath,absolutePath=_Package
    -skip:objectName=filePath,absolutePath=.*\.wpp\.targets$
    -allowUntrusted

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

Web deployment task failed.
(Could not connect to the remote computer ("Some.IP.-.Address") using the specified process ("Web Deployment Agent Service") because the server did not respond.
Make sure that the process ("Web Deployment Agent Service") is started on the remote computer.
Learn more at: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_COULD_NOT_CONNECT_TO_REMOTESVC.)

4. Четвертая попытка - возиться с сгенерированной командой

Так что после еще нескольких копаний мне посчастливилось попробовать некоторые ручные настройки для этой сгенерированной команды msdeploy. В некоторых сообщениях о SO я обнаружил, что для параметра ComputerName в msdeploy в этом случае не следует упоминать реальное приложение, вместо этого следует указывать только имя сайта (я думаю, что имя приложения будет каким-то образом извлечено из пакета. параметры? Может, кто-то может прояснить это для меня тоже)

В итоге я попробовал эту слегка измененную команду:

"C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe"
    -verb:sync
    -source:archiveDir="C:\Users\someName\AppData\Local\Temp\DeployDBVariantion00_zip" 
    -dest:auto,includeAcls='False',ComputerName='https://172.16.200.13:8172/msdeploy.axd?site=DeployApp',Username=someOtherName,Password=haveAnotherGuess,AuthType='BASIC'
    -disableLink:AppPoolExtension
    -disableLink:ContentExtension
    -disableLink:CertificateExtension
    -setParamFile:"C:\Users\someName\AppData\Local\Temp\DeployDBVariantion00_zip\SetParameters.xml"
    -skip:objectName=dirPath,absolutePath="_Deploy_"
    -skip:objectName=filePath,absolutePath=web\..*\.config
    -skip:objectName=dirPath,absolutePath=_Package
    -skip:objectName=filePath,absolutePath=.*\.wpp\.targets$
    -allowUntrusted

И теперь это фактически сделало развертывание!

5. Последствия - Ура и Меее! в то же время?

Так что это момент, когда я оказываюсь прямо сейчас; Я получил команду, которая работает, но не представляю, как я могу заставить этот сценарий сгенерировать его для меня. Ну, на самом деле я мог бы сделать некоторые предположения о том, как я могу настроить этот сценарий в соответствии со своими требованиями, но не думайте, что они такие особенные, кроме того, что сценарий генерируется каждый раз, когда генерируется WebDeploy-Package, поэтому изменяйте только сгенерированный сценарий. не принесет мне много пользы. Просто, чтобы вы могли видеть, что попробуйте тоже в этом сценарии "Publish-Interactive.ps1" в строке 371 он говорит

$compNameCommandFrag = ",ComputerName='{0}?site={1}'" -f $compNameFixedUp, $siteNameParam.Value

Я могу "взломать" это, чтобы работать для меня только в этом случае, чтобы сгенерировать команду msdeploy, которую я хочу, если я изменю ее на

$compNameCommandFrag = ",ComputerName='{0}?site=DeployApp'" -f $compNameFixedUp#, $siteNameParam.Value

Но все мы, вероятно, согласны с тем, что это грязно и, очевидно, не то, что я хочу делать, если я устанавливаю этот пакет / скрипт Nuget в несколько проектов.

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

Итак, подведем итог:

Я ищу ответ на то, что нужно сделать, чтобы правильно настроить параметры, которые сценарий PowerShell запрашивает для достижения того, что я описал выше (все еще предполагая, что это проблема конфигурации с моей стороны, а не ошибка в самом Nuget-пакете)).

Надеюсь, кто-то понимает мою проблему и может помочь. Заранее спасибо всем, кто работает через этот пост;)

1 ответ

Решение

Что ж, оказалось, что это действительно проблема, с которой этот скрипт сталкивается при удаленном развертывании в "вложенную" структуру сайта-приложения.

Выложенный номер на сайте проекта

Другие вопросы по тегам