Может ли MSBuild развертываться с использованием встроенной аутентификации или только базовой? - PullRequest
36 голосов
/ 18 ноября 2010

Я развертываю пакет веб-приложения из командной строки MSBuild в MSDepSvc на IIS6, который отлично работает со следующей командой, использующей обычную аутентификацию:

MSBuild.exe Web.csproj
  /p:Configuration=Debug
  /p:DeployOnBuild=True
  /p:DeployTarget=MSDeployPublish
  /p:MsDeployServiceUrl=http://[server name]/MsDeployAgentService
  /p:DeployIisAppPath=DeploymentTestProject
  /p:MSDeployPublishMethod=RemoteAgent
  /p:CreatePackageOnPublish=True
  /p:username=***
  /p:password=***

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

Что особенно расстраивает, так это то, что я могу с удовольствием запустить команду deploy в пакете с интегрированной аутентификацией (просто не включаю учетные данные), просто не могу запустить ее из командной строки MSBuild. Я пытаюсь инкапсулировать пакет и развернуть процессы в одну команду, не редактируя файлы сборки, и на данный момент это единственное, что мешает.

Есть идеи?

Редактировать После некоторых обсуждений с Сайедом и более глубокого изучения выходных данных командной строки после выполнения вышеуказанной команды MSBuild (без параметров имени пользователя и пароля) вызывается следующая команда MSDeploy:

msdeploy.exe
  -source:package='[project path]\Web\obj\Debug\Package\Web.zip' 
  -dest:auto,ComputerName='http://[server]/MsDeployAgentService',UserName='***',IncludeAcls='False',AuthType='NTLM'
  -verb:sync
  -disableLink:AppPoolExtension
  -disableLink:ContentExtension
  -disableLink:CertificateExtension
  -retryAttempts=2

Вы видите, что атрибут UserName устанавливается, а значением является имя пользователя текущего вошедшего в систему пользователя. Если я возьму это и выполню вышеприведенную команду напрямую, развертывание пройдет очень хорошо.

Итак, почему же исходная команда MSBuild вставляет атрибут UserName при вызове MSDeploy? Похоже, сейчас это единственный барьер.

Ответы [ 4 ]

29 голосов
/ 19 ноября 2010

И ответ ...

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

MSBuild.exe Web.csproj
  /p:Configuration=Debug
  /p:DeployOnBuild=True
  /p:DeployTarget=MSDeployPublish
  /p:MsDeployServiceUrl=http://[server name]/MsDeployAgentService
  /p:DeployIisAppPath=DeploymentTestProject
  /p:MSDeployPublishMethod=RemoteAgent
  /p:CreatePackageOnPublish=True
  /p:username=

, которая затем генерирует следующую команду MSDeploy:

msdeploy.exe 
  -source:package='[project path]\obj\Debug\Package\Web.zip' 
  -dest:auto,ComputerName='http://[server name]/MsDeployAgentService',IncludeAcls='False',AuthType='NTLM' 
  -verb:sync 
  -disableLink:AppPoolExtension 
  -disableLink:ContentExtension 
  -disableLink:CertificateExtension 
  -retryAttempts=2

Этот вызов больше не включает атрибут UserName. Короче говоря, если вы не добавите параметр имени пользователя в вызов MSBuild, он все равно будет вставлять текущую идентификацию и откладывать до базовой аутентификации, которая завершится неудачно, потому что нет пароля. Если вы включили параметр имени пользователя, но не указали его значение, он вообще не включается в команду MSDeploy.

4 голосов
/ 18 ноября 2010

Я заглянул в Microsoft.Web.Publishing.targets и увидел это:

<PropertyGroup>
  <NormalizePublishSettings ...>
  <AuthType Condition="'$(AuthType)'==''" >Basic</AuthType>
  <!--Supported value for $(MSDeployPublishMethod): WMSVC, RemoteAgent, InProc-->
  <MSDeployPublishMethod ... >WMSVC</MSDeployPublishMethod>
  ...
</PropertyGroup>

Итак, похоже, что по умолчанию используется аутентификация Basic при запуске из MSBuild. Тогда я нашел это http://technet.microsoft.com/de-de/library/dd569001(WS.10).aspx

authenticationType указывает тип аутентификации, который будет использоваться. Возможные значения: NTLM и Basic. Если настройка провайдера wmsvc указано, аутентификация по умолчанию тип является основным; в противном случае, по умолчанию тип аутентификации - NTLM.

Я еще не пробовал, но, может быть, это что-то вроде /p:AuthType=NTLM

0 голосов
/ 09 июля 2012

Это сработало, я изначально отвлекся на файл целей, но понял, что моя ошибка была в строке подключения, т.е. я пытался использовать https вместо http.

MSBuild.exe Web.csproj / p: Конфигурация = Отладка / p: DeployOnBuild = True / p: DeployTarget = MSDeployPublish / p: MsDeployServiceUrl = http://[serverName]/MsDeployAgentService / p: DeployIisAppPath = DeploymentTestProject / p: MSDeploypub: Удаленный_каталог: CreatePackageOnPublish = True / p: имя пользователя =

0 голосов
/ 02 июля 2012

Мне удалось заставить NTLM работать следующим образом, когда служба работает под учетной записью с правами администратора на [имя сервера].

Приложение "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ msbuild.exe" \ Test.Web \ Test.Web.csproj / T: Очистить / T: Пакет / P: Конфигурация = Выпуск

C: \ hudson \ jobs \ Test \ workspace \ app \ Test.Web \ obj \ Release \ Package \ Test.Web.deploy.cmd / Y "/ M: http://[server name] / MSDEPLOYAGENTSERVICE" / A: ntlm -allowUntrusted

, который генерирует:

"C: \ Program Files \ IIS \ Microsoft Web Deploy \ msdeploy.exe" -source: package = 'C: \ hudson \ jobs \ Test \ workspace \ app \ Test.Web \ obj \ Release \ Package \ Test .Web.zip '-dest: auto, computerName =' http://[server name] / MSDEPLOYAGENTSERVICE ', authtype =' ntlm ', includeAcls =' False '-verb: sync -disableLink: AppPoolExtension -disableLink: ContentExtension -disableLink: CertificateEx setParamFile: "C: \ hudson \ jobs \ Test \ workspace \ app \ Test.Web \ obj \ Release \ Package \ RapidPrototypeRequestSystem.Web.SetParameters.xml" -allowUntrusted

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...