经过整整两天的“研究”(阅读:把我的头撞在我的键盘上)并诅咒 TeamCity/MSDN/Tomcat 文档以及幻象 IIS 绑定,我想出了一个非常令人困惑的问题的答案:如何我在运行 Windows Server 2008 以及用于必要目的的 IIS 7 的多宿主服务器上更改了 TeamCity 的 IP 地址和端口号?.
首先,一点背景。我们的构建服务器在一个 NIC 上运行具有两个 IP 地址(192.168.1.30 和 192.168.1.31)的 Windows Server 2008。我已将 IIS 配置为将其唯一的站点显式绑定到端口 80 上的 192.168.1.30。此时我认为 192.168.1.31 已完全开放并准备好用于 TeamCity ......不完全是。
第一个烦恼:安装 TeamCity 时,它完全忽略了与该服务器关联的多个 IP 地址这一事实,只询问它应该绑定到哪个端口。对于服务器级软件,这是相当令人惊讶的。
第二个烦恼:TeamCity 默认使用端口 8080(什么??)。由于第一个烦恼,端口选择有点模棱两可:TeamCity 是否会绑定到两个 IP 地址上的端口 8080?将端口选择更改为 80 会产生一个警告,表明另一个服务已经绑定到端口 80。嗯,IIS 应该只绑定到 192.168.1.30 上的端口 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 以剖析其标准输出错误并进行更多研究后,我偶然发现了 StackOverflow 的这个小宝石:如何控制 IIS7 使用的 IP 地址?
因此,从我运行的管理命令行(注意:再次更改 IP 地址!这次是您希望绑定 IIS的 IP 地址)
netsh http add 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。
答案是上面原始“问题”的一部分。