Как выполнить развертывание с использованием MSDeploy и TeamCity со встроенной аутентификацией Windows?
У меня было развертывание MSDeploy, прекрасно работающее с TeamCity, когда я передал учетные данные пользователя. Параметры командной строки (с использованием переменных env. Для некоторых значений):
MSBuild.exe Web.csproj
/P:Configuration=%env.Configuration%
/ P: DeployOnBuild = True
/ Р: DeployTarget = MSDeployPublish
/ P: MsDeployServiceUrl = https://%env.TargetServer%/MsDeploy.axd
/ P: AllowUntrustedCertificate = True
/ Р: MSDeployPublishMethod = WMsvc
/ P: CreatePackageOnPublish = True
/P:UserName=%env.AdminUser%
/P:Password=%env.AdminPassword%
Работал отлично. Но сейчас я хочу использовать встроенную аутентификацию. Я пытался следовать рекомендациям Троя из MSBuild, можно ли использовать встроенную аутентификацию или только базовую? но это не делает трюк. Я пробовал различные комбинации передачи пустого имени пользователя и указания
/ Р:AuthType=NTLM
Самое близкое, что я получаю, - это указать /p:AuthType=NTLM и передать пустое имя пользователя. Но это все еще приводит к этой ошибке:
Подключено к конечному компьютеру ("[имя моего конечного сервера]") с помощью веб-службы управления, но не может авторизоваться. Убедитесь, что вы используете правильное имя пользователя и пароль, что сайт, к которому вы подключаетесь, существует, и что учетные данные представляют пользователя, у которого есть разрешения на доступ к сайту. Удаленный сервер возвратил ошибку: (401) Несанкционированный
У меня служба веб-управления работает как на локальном, так и на удаленном серверах. Я изменил оба экземпляра, чтобы они работали как пользователь, который, как я знаю, имеет надлежащий доступ к сайту - тот же пользователь, который работает, если я вручную передаю учетные данные.
Я также попытался вручную предоставить этому пользователю разрешения диспетчера IIS для конечного сайта (хотя не уверен, зачем это нужно, поскольку пользователь может публиковать данные на сайте, когда его учетные данные передаются вручную).
Одна вещь, которую я замечаю, - то, что в журнале WMsvc это не регистрирует никакое имя пользователя для попыток, сделанных с аутентификацией NTLM.
Любая идея, что здесь происходит. Я действительно не хочу хранить учетные данные пользователя в моей конфигурации TeamCity.
Благодарю.
3 ответа
Я знаю, что немного опоздал с отправкой и ответом на этот вопрос, но в интересах кого-то еще, преследующего этот тип проблемы, мне только удалось заставить это работать.
Как и в случае с OP, я пытался заставить TeamCity на Windows Server 2008R2 опубликовать веб-сайт на удаленном сервере IIS 7.5 с помощью WMsvc.
Я боролся с ошибкой 401, пока не выполнил все эти шаги:
Убедитесь, что AuthType=NTLM установлен.
Убедитесь, что указан параметр Имя пользователя, но установлено пустое значение.
Убедитесь, что проверка подлинности NTLM включена на удаленном веб-сервере, для этого необходимо добавить запись реестра:
HKLM\Software\Microsoft\WebManagement\Server DWORD WindowsAuthenticationEnabled = 1
Убедитесь, что пользовательский контекст, в котором работает агент сборки на сервере сборки, может успешно подключиться к WMsvc с помощью встроенной аутентификации Windows. На самом деле мне пришлось войти на сервер сборки от имени этого пользователя, затем открыть 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.
Служба агента сборки работает под той учетной записью, которую вы хотите использовать? Вы упомянули службу веб-управления, но помните, что это агент сборки, который фактически выполняет работу и нуждается в правах.
Я предполагаю, что развертывание выполняется с учетной записью TeamCity-Agent. Это объяснило бы вашу ошибку. Убедитесь, что эта учетная запись имеет соответствующие права для развертывания.