Может ли MSBuild развертываться с использованием встроенной аутентификации или только базовой?

Я развертываю пакет веб-приложения из командной строки 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. Я пытаюсь инкапсулировать пакет и развернуть процессы в одну команду, не редактируя файлы сборки, и это единственное, что мешает в настоящее время.

Есть идеи?

Edit После некоторых обсуждений с Sayed и более глубокого изучения выходных данных командной строки после выполнения вышеуказанной команды 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 ответа

Решение

И ответ...

После моего редактирования выше о том, что имя пользователя текущего удостоверения сохраняется в команде 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, он все равно будет вставлять текущую идентификацию и откладывать до базовой аутентификации, которая завершится неудачно, потому что нет пароля. Если вы включаете параметр username, но не задаете его, он вообще не включается в команду MSDeploy.

Я посмотрел в 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%28WS.10%29.aspx

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

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

Мне удалось заставить 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://[имя сервера]/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: // [имя сервера]/MSDEPLOYAGENTSERVICE',authtype='ntlm',includeAcls='False' -verb:sync -disableLink:AppPoolExtension -disableLink:ContentExtension -disableLink:CertificateExtension - CertificateExtension - setParamFile:"C:\hudson\jobs\Test\workspace\app\Test.Web\obj\Release\Package\RapidPrototypeRequestSystem.Web.SetParameters.xml" -allowUntrusted

Для меня сработало разбиение процесса на 2 этапа -

  1. Сборка и упаковка

    msbuild.exe /p:DeployOnBuild=True /p:WebPublishMethod=Package /p:PackageAsASingleFile=true /p:AllowUntrustedCertificate=True /p:CreatePackageOnPublish=True /p:SkipExtraFilesOnServer=True /p:PubroflishProfile = p: PubroflishProfile = p: PubroflishProfile = p: разработчик

  2. Развернуть

    msdeploy.exe -source:package = 'C:\packagelocation\dev.zip' -dest:auto,ComputerName = 'http://destinationserver/MsDeployAgentService',IncludeAcls = 'False',AuthType = 'NTLM' -verb:sync -disableLink:AppPoolExtension -disableLink:ContentExtension -disableLink:CertificateExtension -retryAttempts = 2

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

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

Другие вопросы по тегам