经过两天的“研究”(阅读:用键盘敲打我的头)并诅咒TeamCity / MSDN / Tomcat文档以及幻像IIS绑定后,我想出了一个非常困惑的问题的答案:如何解决我在运行Windows Server 2008以及IIS 7的多宿主服务器上更改TeamCity的IP地址和端口号,IIS 7是否有必要?。
首先,有一点背景。我们的构建服务器运行Windows Server 2008,并且在一个NIC上具有两个IP地址(192.168.1.30和192.168.1.31)。我已将IIS配置为将其唯一站点唯一地绑定到端口80上的192.168.1.30。这时,我认为192.168.1.31已完全开放,可以用于TeamCity了……还不完全。
第一个烦恼:安装TeamCity时,它完全忽略了与此服务器相关联的多个IP地址,仅询问它应绑定到哪个端口这一事实。对于服务器级软件,这非常令人惊讶。
第二个烦恼:TeamCity默认使用端口8080(wha ??)。由于最初的烦恼,端口选择有些模棱两可:TeamCity是否将绑定到两个IP地址上的端口8080?将端口选择更改为80会产生一个警告,即另一个服务已绑定到端口80。192.168.1.31上不应绑定任何内容。显然,TeamCity正在与192.168.1.30上的IIS竞争。
完成TeamCity的安装后,选择端口80并忽略绑定警告,然后打开“ C:\ TeamCity \ server.xml”。旁注:“ C:\ TeamCity \”是TeamCity的默认安装目录,而“ C:\ Users \ .BuildServer”是默认数据目录。无论如何,“ server.xml”是配置文件,您可以在其中设置诸如TeamCity的Web界面的端口和IP地址之类的内容。经过一些研究,我提出了在端口80上绑定IP地址192.168.1.31的配置:
寻找其中一个
<Connector
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
要么
<Connector
port="80"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
取决于您在安装过程中选择的端口。更改为(注意:更改IP地址!)
<Connector
port="80"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
address="192.168.1.31" />
应该就这么简单吧,对吧?好了,重新启动TeamCity的Web服务器(通过Windows的服务管理器)不会在192.168.1.31上产生任何结果。啊。
事实证明,即使IIS的唯一站点在端口80上已明确绑定到192.168.1.30,IIS仍会侦听所有 IP地址。当然,这使TeamCity的Web服务器(Tomcat)停止运行,该服务器甚至在上线之前就停止了运行。从命令行手动启动Tomcat剖析其stdout错误并进行了更多研究之后,我碰巧遇到了StackOverflow上的这个小宝贝:如何控制IIS7使用的IP地址?
所以,从管理的命令行我运行(注:再次,你这时候更改IP地址,IP地址!希望 IIS被束缚)
netsh http添加iplisten ipaddress = 192.168.1.30
现在,我重新启动TeamCity的Web服务器,瞧,它可以工作了!!我可以浏览到192.168.1.31,而无需指定端口号,然后出现TeamCity的Web界面。快速的健全性检查表明,IIS仍然正确地绑定到192.168.1.30。一切都很好。
抱歉,这么简单的修复很长。我希望这可以帮助其他人,因为它肯定会节省我几个小时的时间。
编辑:使用TeamCity一段时间后,我注意到与TeamCity一起安装的Build Agent无法正确识别。要解决此问题,我必须将Build Agent指向TeamCity的新URL。此配置更改在“ C:\ TeamCity \ buildAgent \ conf \ buildAgent.properties”中完成。同样,这是默认安装TeamCity的路径,并且可能会有所不同,具体取决于您如何自定义TeamCity的安装。
在“ buildAgent.properties”内部,确保“ serverUrl”指向新的TeamCity URL。就我而言,我将其更新为:
serverUrl = http \://192.168.1.31
进行此更改后,重新启动TeamCity Web Server和TeamCity Build Agent。