Можно ли развертывать 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=***

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

Что особенно расстраивает, так это то, что я могу с радостью запустить команду deploy в пакете со встроенным auth (просто не включайте учетные данные), я просто не могу запустить его из командной строки 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? Теперь это единственный барьер.

Ответ 1

И ответ...

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

Ответ 2

Я посмотрел в Microsoft.Web.Publishing.targets и увидел это:

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

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

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

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

Ответ 3

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

"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 -setParamFile: "C:\hudson\jobs\Test\workspace\app\Test.Web\obj\Release\Package\RapidPrototypeRequestSystem.Web.SetParameters.xml" -allowUntrusted

Ответ 4

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

MSBuild.exe Web.csproj/p: Configuration = Debug/p: DeployOnBuild = True/p: DeployTarget = MSDeployPublish/p: MsDeployServiceUrl = http://[имя_сервера]/MsDeployAgentService/p: DeployIisAppPath = DeploymentTestProject/p: MSDeployPublishMethod = RemoteAgent/p: CreatePackageOnPublish = True/p: имя пользователя =