Как установить веб-сайт назначения на MSDeploy.командная строка в EXE
у меня есть пакет Web Deploy 3.5, который я хочу развернуть на удаленном сервере. Как указать имя сайта в MSDeploy.командная строка в EXE?
вот что у меня пока есть:
C:Program Files (x86)IISMicrosoft Web Deploy V3msdeploy.exe
-source:package='package.zip'
-dest:auto,computerName="ServerName",includeAcls="False"
-verb:sync
-disableLink:AppPoolExtension
-disableLink:ContentExtension
-disableLink:CertificateExtension
-setParamFile:"package.SetParameters.xml"
но название сайта указано в package.SetParamters.xml
файл, и я бы предпочел установить его в командной строке. Некоторые из мест, где я хочу развернуть этот пакет, - это разные сайты, расположенные на одном сервере, такие как наши сайты Stage и UAT.
Я посмотрел на использование поставщиков iisapp и appHostConfig, описанных здесь: http://technet.microsoft.com/en-us/library/dd569040%28v=ws.10%29.aspx
но у меня возникли проблемы с использованием их в сочетании с файлом пакета.
3 ответов
вы можете переопределить его с помощью setParam
:
msdeploy.exe
-source:package='package.zip'
-dest:auto,computerName="ServerName",includeAcls="False"
-verb:sync
-disableLink:AppPoolExtension
-disableLink:ContentExtension
-disableLink:CertificateExtension
-setParamFile:"package.SetParameters.xml"
-setParam:name="IIS Web Application Name",value="site name"
сделать то же самое в PowerShell (см. ответ Ричарда Салая), вы должны быть немного осторожны с обработкой аргументов командной строки - особенно там, где задействованы пробелы. Я считаю, что лучше всего передать их как массив, где нужные аргументы командной строки эффективно разделены на символ пробела. Обратите внимание, что строки ниже разделены запятыми, а также что имя параметра "IIS Web Application" разделено. Я оставил это на одной линии для улучшения. удобочитаемость.
$msdeploy = "C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy.exe";
$msdeployArguments =
'-source:package="package.zip"',
'-dest:auto,computerName="<ServerName>",includeAcls="False"',
'-verb:sync',
'-disableLink:AppPoolExtension',
'-disableLink:ContentExtension',
'-disableLink:CertificateExtension',
'-setParam:name="IIS', 'Web', 'Application', 'Name",value="<WebsiteName>"'
& $msdeploy $msdeployArguments
обновление
у меня были проблемы, когда я вернулся к параметризации имени веб-сайта. Поскольку я использовал одинарные кавычки для строк, я решил использовать конкатенацию, а не строку интерполяции. К сожалению, запятые, которые разделяли элементы в массиве, по-видимому, были оценены до конкатенации. В результате вместо конкатенации строк в элементе массива я конкатенировал новые элементы массива. Мое решение состояло в том, чтобы использовать круглые скобки для окружения элемента массива и заставить конкатенацию выполняться первой.
$msdeployArguments =
'-source:package="package.zip"',
('-dest:auto,computerName="' + $webServerName + '",includeAcls="True"'),
'-verb:sync',
'-disableLink:AppPoolExtension',
'-disableLink:ContentExtension',
'-disableLink:CertificateExtension',
'-setParam:name="IIS', 'Web', 'Application', ('Name",value="' + $websiteName + '"');
Я пробовал все ответы здесь (и в основном все ответы из интернета) ни один из них не работал для меня. Не знаю почему. Затем я нашел этой страница, которая объясняет, как использовать MSDeploy для резервного копирования (я только что отменил его для развертывания). Тайная душа - это"contentPath". Это немного вводит в заблуждение, потому что в этом случае не путь на диске (однако я видел примеры, которые использовали его для передачи в физическом пути размещенного сайта). но я не хотел использовать физический путь. А тебе и не нужно! Фокус в том, чтобы:он может содержать веб-сайт или дочерний сайт (в IIS yoursite.com/shop, поэтому я думаю,что это путь в IIS) имя.
использование для резервного копирования:
msdeploy –verb:sync -source:contentPath="yoursite.com" -dest:package=c:\Backups\yoursite.zip
использование для развертывания:
msdeploy –verb:sync -source:package=c:\Deployment\yoursite.zip -dest:contentPath="yoursite.com"
я тратил почти день с declareParam, setParam и т. д... Однако это так просто!
надеюсь, что это помогает...