Después de dos días completos de "investigación" (léase: golpeando mi cabeza contra mi teclado) y maldiciendo a TeamCity/MSDN/documentación de Tomcat así como fantasma enlaces de IIS, me he encontrado con una respuesta a una muy desconcertante problema: ¿Cómo puedo cambiar TeamCity, la dirección IP y número de puerto en un servidor multitarjeta que ejecuta Windows Server 2008, así como también de IIS 7, que es el que sirve a un fin necesario?.
Primero, un poco de fondo. Nuestro servidor se está ejecutando Windows Server 2008 con dos direcciones IP 192.168.1.30 y 192.168.1.31) en una NIC. He configurado IIS para enlazar explícitamente su único y sitio para 192.168.1.30 en el puerto 80. En este momento estoy pensando que 192.168.1.31 está abierto y listo para ser utilizado para TeamCity... no del todo.
Primera molestia: al instalar TeamCity, es completamente ignora el hecho de que hay múltiples direcciones IP asociadas con este servidor sólo pide que el puerto que debe enlazar. Para server-software de nivel, esto es bastante sorprendente.
La segunda molestia: TeamCity valor predeterminado es el puerto 8080 (wha??). Debido a la primera molestia, la selección de puerto es un tanto ambigua: es TeamCity va a enlazar con el puerto 8080 en ambas direcciones IP? El cambio de la selección del puerto 80 de los rendimientos de una advertencia de que otro servicio ya está enlazado al puerto 80. Hmm, IIS sólo debe ser enlazado al puerto 80 en 192.168.1.30; nada debe ser enlazado en 192.168.1.31. Obviamente TeamCity está compitiendo con IIS en 192.168.1.30.
Acabado TeamCity de la instalación, después de elegir el puerto 80 y haciendo caso omiso de la unión de advertencia, abro "C:\TeamCity\server.xml". Nota al margen: "C:\TeamCity\" es el valor predeterminado de la instalación de directorio para TeamCity, mientras que "C:\Users\.BuildServer" es el valor predeterminado de datos de directorio. De todos modos, "server.xml" es el archivo de configuración donde se puede configurar cosas como el puerto y la dirección IP de TeamCity de la interfaz web. Después de un poco de investigación he llegado con la configuración de enlace de la dirección IP 192.168.1.31 en el puerto 80:
Busque cualquiera
<Connector
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
o
<Connector
port="80"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
dependiendo del puerto que eligió durante la instalación. Cambio (nota: cambie la dirección IP!)
<Connector
port="80"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
address="192.168.1.31" />
Debería ser tan fácil como que, a la derecha... a la derecha? Bien, al reiniciar TeamCity del Servidor Web (a través de Windows, el Administrador de Servicios) los rendimientos nada en 192.168.1.31. Ugh.
Resulta que aunque IIS uno y sólo sitio ha sido explícitamente vinculado a 192.168.1.30 en el puerto 80, IIS todavía se escucha en todas direcciones IP. Esto, por supuesto, arroja TeamCity del Servidor Web (Tomcat), que se detiene antes de entrar en línea. Después de iniciar manualmente Tomcat desde la línea de comandos para analizar su salida estándar de error, y más aún de la investigación, se me ocurre a esta pequeña joya de StackOverflow: ¿Cómo puedo controlar la dirección IP IIS7 utiliza?
Así, a partir de un Administrativo de línea de comandos ejecutar (nota: de nuevo, cambie la dirección IP! Esta vez de la dirección IP que desea IIS estar obligado)
netsh http agregar iplisten ipaddress=192.168.1.30
Ahora reinicio TeamCity del Servidor Web y voila, funciona!! Puedo navegar a 192.168.1.31 sin tener que especificar un número de puerto y TeamCity de la interfaz web. Una rápida comprobación de validez muestra de que IIS está siendo enlazado correctamente a 192.168.1.30. Todo está bien.
Lo siento por el post largo para una simple revisión. Espero que esto ayude a alguien como seguro que me habría ahorrado horas de fastidio.
Edit: Después de usar TeamCity por un tiempo, me di cuenta de que el Agente de Compilación que se había instalado con TeamCity no estaba siendo reconocido correctamente. Para solucionar esto, lo tenía a punto el Agente de Compilación a la nueva URL para TeamCity. Este cambio en la configuración se realiza en la "C:\TeamCity\buildAgent\conf\buildAgent.properties". De nuevo, este es el camino para una instalación predeterminada de TeamCity y puede ser diferente dependiendo de cómo personalizar la instalación de TeamCity.
Dentro de "buildAgent.propiedades de" asegurarse "de que serverUrl" señala a la nueva TeamCity URL. En mi caso, he actualizado a:
serverUrl=http\://192.168.1.31
Después de realizar este cambio, reinicie TeamCity Servidor Web y TeamCity Agente de Compilación.