2011-11-08 11 views
8

Tenía una implementación de MSDeploy funcionando de maravilla con TeamCity cuando pasé las credenciales de usuario. (. env utilizando variables para algunos valores) los parámetros de línea de comandos fueron:¿Cómo implemento usando MSDeploy y TeamCity con la Autenticación de Windows integrada?

MSBuild.exe Web.csproj
/P:Configuration=%env.Configuration%
/P:DeployOnBuild=True
/P:DeployTarget=MSDeployPublish
/P:MsDeployServiceUrl= https://%env.TargetServer%/MsDeploy.axd
/P:AllowUntrustedCertificate=True
/P:MSDeployPublishMethod=WMsvc
/P:CreatePackageOnPublish=True
/P:UserName=%env.AdminUser%
/P:Password=%env.AdminPassword%

funcionó muy bien. Pero ahora quiero usar autenticación integrada. Traté de seguir las sugerencias de Troy desde Can MSBuild deploy using integrated authentication or only basic? pero no está haciendo el truco. He intentado varias combinaciones de pasar en un nombre de usuario en blanco y especificando

/p:AuthType=NTLM

Lo más cerca que consigo es especificando/p: TipoAut = NTLM y pasando un nombre de usuario en blanco. Pero que todavía provoca este error:

Connected to the destination computer ("[my destination server name]") using the Web Management Service, but could not authorize. Make sure that you are using the correct user name and password, that the site you are connecting to exists, and that the credentials represent a user who has permissions to access the site. The remote server returned an error: (401) Unauthorized

tengo el servicio de administración de Web que se ejecuta tanto en los servidores locales y remotos. Cambié las dos instancias para que se ejecuten como un usuario que sé que tiene acceso adecuado al sitio, el mismo usuario que funciona si paso las credenciales manualmente.

También intenté otorgar permisos a ese usuario IIS Manager en el sitio de destino (aunque no estoy seguro de por qué sería necesario porque el usuario puede publicar en el sitio cuando se pasan sus credenciales manualmente).

Una cosa que estoy notando es que en el registro de WMsvc no está registrando ningún nombre de usuario para los intentos realizados con autenticación NTLM.

Cualquier idea de lo que está pasando aquí. Realmente no quiero tener que almacenar las credenciales de usuario en mi configuración de TeamCity.

Gracias.

Respuesta

0

Supongo que la implementación se ejecuta con la cuenta del TeamCity-Agent. Esto explicaría tu error. Asegúrese de que esta cuenta tenga los derechos apropiados para la implementación.

+0

Ver comentario arriba. Respuesta corta, tiene. – user1035941

1

¿El servicio de agente de compilación se ejecuta con la cuenta que desea utilizar? Menciona el servicio de administración web, pero recuerde que es el agente de creación que realmente está haciendo el trabajo y necesita los derechos.

+0

Lo siento, debería haberlo señalado. Sí, el servicio TeamCity Build Agent también se ejecuta bajo la cuenta con los permisos adecuados. Ese fue siempre el caso, acabo de actualizar el servicio de administración web ya que el error indica "usar el servicio de administración web". – user1035941

+0

@Troy ¿se ha conectado con éxito al WMSvc usando NTLM? Una prueba simple como 'msdeploy.exe -verb: dump -source: apphostconfig, wmsvc = SERVER123, username =, authType = ntlm -allowUntrusted' donde soy administrador en SERVER123, produce 401 errores. – arcain

12

Sé que estoy un poco tarde presentando y respondiendo sobre esto, pero para el beneficio de cualquier otra persona que persiga este tipo de problema, me las he arreglado para hacer que esto funcione.

Al igual que en el OP, estaba intentando que TeamCity en Windows Server 2008R2 publicara un sitio web en un servidor remoto IIS 7.5 utilizando WMsvc.

yo estaba luchando con el error 401 hasta que completaron todos de estos pasos:

  • Asegúrese AuthType = conjunto de parámetros NTLM.

  • Asegure el parámetro de nombre de usuario suministrado, pero establezca un valor en blanco.

  • garantizar la autenticación NTLM habilitada en el servidor web remoto, esto implicó la adición de una entrada de registro:

    HKLM\Software\Microsoft\WebManagement\Server 
    DWORD WindowsAuthenticationEnabled = 1 
    
  • Garantizar contexto de usuario en la que el agente de compilación se ejecuta en el servidor de compilación puede hacer con éxito una autenticación integrada de Windows conexión al WMsvc.De hecho, tuve que iniciar sesión en el servidor de compilación como este usuario, luego abrir IE y agregar el sitio web de destino a la zona de intranet local. Básicamente, no dejaba de golpear a esta URL y modifique los ajustes de IE hasta que pude llegar directamente a ella sin mensajes de autenticación o 401 errores:

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

Por cierto, cuando me dieron el trabajo de autenticación, el WMSVC a distancia empezó a dar me 404 errores en el brownser en su lugar, que resultó ser una buena señal. Durante este proceso, también configuré un certificado SSL en el WMsvc remoto en el que confiaba el servidor de compilación, posiblemente no era una necesidad, pero me ayudó en las pruebas.

Una vez que me completó la TeamCity, despliegues anteriores comenzaron a comunicar este error:

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. 

no pude encontrar nada útil en el registro de eventos, pero la solución aquí fue sólo para asegurarse de que el usuario autenticado tenía los permisos necesarios del sistema de archivos en la carpeta de destino. Es posible que desee ser más selectivo, pero acabo de darles un control total sobre Inetpub.

+2

Solo una nota para cualquiera que agregue la clave reg WindowsAuthenticationEnabled manualmente: aprenda de las 3 horas que acabo de perder solucionando una implementación y asegúrese de no pegar accidentalmente un espacio al final en el nombre de la clave. Gah. – Michael12345

+0

+1 para señalar el problema de la Zona de Intranet Local. Lo hice funcionar cuando intenté usar computerName = 'https: //192.168 ....: 8172' en lugar de un nombre de host. Sin embargo, especificar un nombre de usuario en blanco parece inútil para que funcione. –

Cuestiones relacionadas