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

#windows-services #msdeploy #web-deployment

#windows-services #msdeploy #веб-развертывание

Вопрос:

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

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

 "tools/deploy/msdeploy.exe" -verb:sync 
-preSync:runCommand="toolsDeployPreSyncCommand.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, или путь развертывания?). Учетная запись service-deploy также имеет полный контроль над целевым каталогом. Я получаю следующий ответ:

 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:TeamCitybuildAgentworkaec989676b349656toolsDe
ployPreSyncCommand.cmd).
Warning: Access is denied.
Warning: The process 'C:Windowssystem32cmd.exe' (command line '/c "C:Windows
ServiceProfilesLocalServiceAppDataLocalTempgiz2t0kb.0ay.cmd"') exited with
 code '0x1'.
  

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

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

Комментарии:

1. Я опубликовал запись в блоге о том, как это сделать: jamescrowley.co.uk/2011/04/28 /…

2. Запись в блоге, опубликованная Джеймсом Кроули выше, была перенесена, теперь она находится здесь

Ответ №1:

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

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

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

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

Комментарии:

1. Спасибо! Мне не хватало элемента run as . Теперь это работает отлично.