Использование MsDeploy для развертывания служб Windows с помощью команды preSync - PullRequest
9 голосов
/ 04 мая 2011

Кто-нибудь успешно использует MsDeploy для развертывания служб Windows с preSync runCommand?У меня все работает, используя учетную запись администратора, но я не могу заставить ее работать со стандартной учетной записью пользователя.К сожалению, я не могу использовать встроенную аутентификацию (мы развертываем во внешнем блоке), и мысль о том, что наш пароль администратора находится в незашифрованном виде в журналах на нашем сервере сборки, не заставляет меня чувствовать себя слишком комфортно.В этом отношении, ни один не делает никаких учетных данных пользователя - но я не могу найти способ обойти это.

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

"tools/deploy/msdeploy.exe" -verb:sync 
-preSync:runCommand="tools\Deploy\PreSyncCommand.cmd",waitInterval=30000 
-source:dirPath="C:\BuiltSourcePath" 
-dest:computerName=https://server:8172/msdeploy.axd?site=dummysitename,userName=service-deploy,password=service-deploy-pass,authType=basic,dirPath="C:\DeployPath\"
-allowUntrusted

с правилами, установленными вIIS для фиктивного сайта, чтобы разрешить аутентификацию для учетной записи windows развертывания службы с разрешениями contentPath и runCommand (на данный момент установлено значение C: \, поскольку не совсем ясно, нужно ли задавать временный путь, по которому MsDeploy передает потоки)или путь развертывания?).Учетная запись службы-развертывания также полностью контролирует целевой каталог.Я получаю следующее:

Performing '-preSync'...
Info: Using ID '7a7d34a1-b5d8-49f1-960a-31c9cf825868' for connections to the remote server.
Info: Using ID '4d0b910c-aca4-4640-84bd-3597d22d99d1' for connections to the remote server.
Info: Updating runCommand (C:\TeamCity\buildAgent\work\aec989676b349656\tools\De
ploy\PreSyncCommand.cmd).
Warning: Access is denied.
Warning: The process 'C:\Windows\system32\cmd.exe' (command line '/c "C:\Windows
\ServiceProfiles\LocalService\AppData\Local\Temp\giz2t0kb.0ay.cmd"') exited with
 code '0x1'.

Это происходит, даже если содержимое PreSyncCommand.cmd пустое.Эта же команда работает нормально, если я передаю учетные данные администратора.Я пытался использовать ProcessMonitor, чтобы проверить, отказано ли что-либо в доступе, но ничего не видно, поэтому я предполагаю, что это все еще правило аутентификации MsDeploy.Нет ничего ни в WmSvc.log (отладка включена), ни в журнале событий.

Есть идеи?Спасибо!

1 Ответ

13 голосов
/ 05 мая 2011

Поскольку вы используете Web Deploy через WmSvc, вам необходимо настроить соответствующие правила делегирования на конечном сервере:

В Диспетчер IIS откройте функцию «Делегирование службы управления». Добавьте новое правило, которое хотя бы указывает поставщика runCommand. В разделе Запуск от имени выберите Specific User и укажите учетные данные для учетной записи локального администратора на этом компьютере. Это идентификатор, под которым будут выполняться ваши скрипты runCommand . Наконец, пользователь, которого вы указываете для конечного поставщика dirPath , должен быть добавлен в правило делегирования.

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

Дополнительная информация о делегировании функций IIS: http://learn.iis.net/page.aspx/516/configure-the-web-deployment-handler/

...