(MSDeploy) Развертывание содержимого папки на удаленном сервере IIS
Можно ли развернуть содержимое папки (обычные HTML-файлы) в определенном веб-приложении на удаленном сервере IIS6/7?
Следующая команда не выдает ошибку, но и не публикует файлы на удаленном сервере:
msdeploy.exe -verb:sync -source:dirPath="c:\myHtmlFiles" -dest:auto,ComputerName="http://deploy.mycompany.co.uk/msdeploy?site=TestSite",includeAcls="false",username="administrator",password="myPassword" -enableRule:DoNotDeleteRule -disableLink:AppPoolExtension -disableLink:ContentExtension -allowUntrusted
НОТА:
- WebDeploy правильно установлен на конечном сервере и успешно работает с пакетами, созданными из сценариев msbuild для проектов.NET.
- " http://deploy.mycompany.co.uk/msdeploy" подходит для конечной точки прослушивания.
- Строка запроса '? Site=TestSite' была предложена в другом месте, но не работает.
- Веб-приложение "TestSite" существует на целевом сервере.
- Файлы параметров и -setParam не работают и отображают ошибки, связанные с источником, не поддерживающим параметр "Имя веб-приложения IIS", если вы пытаетесь установить, объявить или предоставить его.
1 ответ
Я только что написал сообщение в блоге, чтобы ответить на это в http://sedodream.com/2012/08/20/WebDeployMSDeployHowToSyncAFolder.aspx. Судя по вашему вопросу, вы, похоже, довольно хорошо знакомы с MSDeploy, поэтому ответ может быть немного многословным, но я хотел, чтобы люди с меньшими знаниями MSDeploy могли его понять. Я вставил ответ ниже.
Web Deploy (также известный как MSDeploy) использует модель провайдера, и существует множество доступных провайдеров из коробки. Чтобы дать вам пример некоторых из поставщиков; при синхронизации веб-приложения IIS вы будете использовать iisApp, для пакета MSDeploy вы будете использовать пакет, для веб-сервера веб-сервера и т. д. Если вы хотите синхронизировать локальную папку с удаленным путем IIS, то вы можете использовать поставщика contentPath. Вы также можете использовать этот поставщик для синхронизации папки с одного сайта на другой сайт.
Общая идея того, что мы хотим сделать в этом случае, заключается в синхронизации папки с вашего компьютера с вашим веб-сайтом IIS. Вызов msdeploy.exe может быть немного многословным, поэтому давайте создадим команду по одному шагу за раз. Мы будем использовать шаблон ниже.
msdeploy.exe -verb:sync -source:contentPath="" -dest:contentPath=""
Мы используем глагол sync для описания того, что мы пытаемся сделать, а затем используем провайдера contentPath для источника и назначения. Теперь давайте заполним, какими должны быть эти значения. Для исходного значения вам нужно будет указать полный путь к папке, которую вы хотите синхронизировать. В моем случае файлы находятся в C: \ temp \ files-to-pub. Для значения dest вы укажите путь к папке в виде пути IIS. В моем случае веб-сайт, с которым я синхронизируюсь, называется sayedupdemo, поэтому я хочу синхронизировать путь IIS ' sayedupdemo / files-to-pub '. Теперь это даст нам.
msdeploy.exe –verb:sync -source:contentPath="C:\temp\files-to-pub" -dest:contentPath='sayedupdemo/files-to-pub'
Для значения dest мы не указали никаких параметров, указывающих, на какой сервер эти команды должны быть отправлены. Нам нужно будет добавить эти параметры. Параметры, которые обычно должны быть переданы:
- ComputerName - это URL или имя компьютера, которые будут обрабатывать операцию публикации
- Имя пользователя - имя пользователя
- Пароль - пароль
- AuthType - тип authType, который будет использоваться. Либо NTLM, либо Basic. Для WMSvc это обычно Basic, для Remote Agent Service это NTLM
В моем случае я публикую на веб-сайте Windows Azure. Итак, значения, которые я буду использовать:
- Имя_компьютера: https://waws-prod-blu-001.publish.azurewebsites.windows.net/msdeploy.axd?site=sayedupdemo
- Имя пользователя: $sayedupdemo
- Пароль: thisIsNotMyRealPassword
- AuthType: Basic
Все эти значения можно найти в файле.publishSettings (можно загрузить с панели мониторинга веб-сайта на WindowsAzure.com). В качестве значения ComputerName вам необходимо добавить название вашего сайта, чтобы получить полный URL. В приведенном выше примере я добавил вручную ?site=sayedupdemo
это то же имя, которое показано на портале Azure. Так что теперь команда, которая у нас есть.
msdeploy.exe
–verb:sync
-source:contentPath="C:\temp\files-to-pub"
-dest:contentPath='sayedupdemo/files-to-pub'
,ComputerName="https://waws-prod-blu-001.publish.azurewebsites.windows.net/msdeploy.axd?site=sayedupdemo"
,UserName='$sayedupdemo'
,Password='thisIsNotMyRealPassword'
,AuthType='Basic'
ОК, мы почти на месте! В моем случае я хочу убедиться, что я не удаляю файлы с сервера во время этого процесса. Так что я тоже добавлю –enableRule:DoNotDeleteRule
, Так что наша команда сейчас.
msdeploy.exe
–verb:sync
-source:contentPath="C:\temp\files-to-pub"
-dest:contentPath='sayedupdemo/files-to-pub'
,ComputerName="https://waws-prod-blu-001.publish.azurewebsites.windows.net/msdeploy.axd?site=sayedupdemo"
,UserName='$sayedupdemo'
,Password='thisIsNotMyRealPassword'
,AuthType='Basic'
-enableRule:DoNotDeleteRule
На этом этапе, прежде чем выполнить эту команду, я сначала выполню ее, пройдя –whatif
, Это даст мне краткую информацию о том, какие операции будут выполняться без каких-либо изменений. Когда я делаю это, результат показан на изображении ниже.
После того как я убедился, что все изменения сделаны преднамеренно, я удалил –whatif
и выполнил команду. После этого локальные файлы были опубликованы на удаленном сервере. Теперь, когда я синхронизировал файлы, которые публикуются после публикации, это приведет к публикации только измененных файлов.
Если вы хотите узнать, как записать отдельный файл, вы можете посмотреть мой предыдущий пост в блоге Как отключить ваше веб-приложение во время публикации.
Адресат: авто
В вашем случае я отметил, что вы используете dest:auto
, вы можете использовать это, но вам придется передать имя приложения IIS в качестве параметра, и он заменит путь к папке. Ниже приведена команда.
msdeploy.exe
-verb:sync
-source:contentPath="C:\temp\files-to-pub"
-dest:auto
,ComputerName="https://waws-prod-blu-001.publish.azurewebsites.windows.net/msdeploy.axd?site=sayedupdemo"
,UserName='$sayedupdemo'
,Password='thisIsNotMyRealPassword'
,AuthType='Basic'
-enableRule:DoNotDeleteRule
-setParam:value='sayedupdemo',kind=ProviderPath,scope=contentPath,match='^C:\\temp\\files-to-pub$'