Как выполнить развертывание с использованием MSDeploy и TeamCity с интегрированной аутентификацией Windows? - PullRequest
8 голосов
/ 08 ноября 2011

У меня было развертывание MSDeploy, прекрасно работающее с TeamCity, когда я передал учетные данные пользователя.Параметры командной строки (с использованием переменных env. Для некоторых значений):

MSBuild.exe Web.csproj
/ P: конфигурация =% env.Configuration%
/ P: DeployOnBuild= Истина
/ P: DeployTarget = MSDeployPublish
/ P: MsDeployServiceUrl = https://%env.TargetServer%/MsDeploy.axd
/ P: AllowUntrustedCertificate = Истина
/ P: MSDeployPublishMethod = WMsvc
Ong CreatePage= True
/ P: Имя пользователя =% env.AdminUser%
/ P: Пароль =% env.AdminPassword%

Отлично сработало.Но сейчас я хочу использовать встроенную аутентификацию.Я попытался следовать рекомендациям Троя, начиная с Может ли MSBuild развертываться с использованием встроенной аутентификации или только с базовой? , но это не сработало.Я пробовал различные комбинации передачи пустого имени пользователя и указания

/ p: AuthType = NTLM

Самое близкое, что я получаю, указав / p: AuthType =NTLM и передача пустого имени пользователя.Но это все равно приводит к этой ошибке:

Подключено к конечному компьютеру («[имя моего конечного сервера]») с помощью службы веб-управления, но не может авторизоваться.Убедитесь, что вы используете правильное имя пользователя и пароль, что сайт, к которому вы подключаетесь, существует, и что учетные данные представляют пользователя, у которого есть разрешения на доступ к сайту.Удаленный сервер возвратил ошибку: (401) Несанкционированный

Служба веб-управления работает как на локальном, так и на удаленном серверах.Я изменил оба экземпляра, чтобы они работали как пользователь, который, как я знаю, имеет надлежащий доступ к сайту - тот же пользователь, который работает, если я вручную передаю учетные данные.

Я также пытался вручную предоставить этому пользователю разрешения диспетчера IIS для конечного сайта (хотя не уверен, зачем это нужно, поскольку пользователь может публиковать данные на сайте, когда его учетные данные передаются вручную).

Одна вещь, которую я замечаю, заключается в том, что в журнале WMsvc не регистрируется ни одно имя пользователя для попыток, предпринятых с аутентификацией NTLM.

Есть идеи, что здесь происходит.Я действительно не хочу хранить учетные данные пользователя в моей конфигурации TeamCity.

Спасибо.

Ответы [ 3 ]

12 голосов
/ 25 февраля 2013

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

Аналогично OP, я пытался заставить TeamCity на Windows Server 2008R2 опубликовать веб-сайт на удаленном сервере IIS 7.5 с помощью WMsvc.

Я боролся с ошибкой 401, пока не выполнил все эти шаги:

  • Убедитесь, что AuthType = NTLM установлен.

  • Убедитесь, что указан параметр Имя пользователя, но задано пустое значение.

  • Убедитесь, что на удаленном веб-сервере включена аутентификация NTLM, для этого необходимо добавить запись в реестре:

    HKLM\Software\Microsoft\WebManagement\Server
    DWORD WindowsAuthenticationEnabled = 1
    
  • Убедитесь, что пользовательский контекст, в котором агент компоновки запускается на сервере компоновки, может успешно выполнять интегрированное по Windows соединение аутентификации с WMsvc. Я действительно должен был войти на сервер сборки от имени этого пользователя, затем открыть IE и добавить целевой веб-сайт в зону локальной интрасети. По сути, я продолжал нажимать на этот URL и изменять настройки в IE, пока не смог перейти к нему без запросов аутентификации или ошибок 401:

    https://[the server]:8172/MsDeploy.axd?site=[the site]
    

Между прочим, когда я включил аутентификацию, удаленный WMSvc вместо этого начал выдавать мне 404 ошибки в браузере, что оказалось хорошим признаком. Во время этого процесса я также установил сертификат SSL на удаленном WMsvc, которому доверял сервер сборки - возможно, это не является необходимостью, но это помогло моему тестированию.

После того как я выполнил вышеуказанное, развертывания TeamCity начали сообщать об этой ошибке:

An error occurred when the request was processed on the remote computer.
The server experienced an issue processing the request. Contact the server administrator for more information.

Я не смог найти ничего полезного в журнале событий, но исправление здесь заключалось в том, чтобы убедиться, что аутентифицированный пользователь имеет необходимые разрешения для файловой системы в целевой папке. Возможно, вы хотите быть более избирательным, но я просто дал им полный контроль над Inetpub.

1 голос
/ 09 ноября 2011

Служба агента сборки работает под той учетной записью, которую вы хотите использовать?Вы упомянули службу веб-управления, но помните, что это агент сборки , который фактически выполняет работу и нуждается в правах.

0 голосов
/ 08 ноября 2011

Я предполагаю, что развертывание выполняется с учетной записью TeamCity-Agent. Это объяснило бы вашу ошибку. Убедитесь, что эта учетная запись имеет соответствующие права для развертывания.

...