Bra*_* B. 21 windows-server-2008 iis-7 ip teamcity multi-homed
经过整整两天的“研究”(阅读:将我的头撞在我的键盘上)并诅咒 TeamCity/MSDN/Tomcat 文档以及幻影 IIS 绑定,我想出了一个非常令人困惑的问题的答案:如何才能我在运行 Windows Server 2008 和 IIS 7 的多宿主服务器上更改了 TeamCity 的 IP 地址和端口号,这有必要吗?.
首先,介绍一下背景。我们的构建服务器运行 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(什么??)。由于第一个烦恼,端口选择有点模棱两可: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 网络界面的端口和 IP 地址等内容。经过一番研究,我想出了在端口 80 上绑定 IP 地址 192.168.1.31 的配置:
寻找任何一个
<Connector
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
Run Code Online (Sandbox Code Playgroud)
或者
<Connector
port="80"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
Run Code Online (Sandbox Code Playgroud)
取决于您在安装过程中选择的端口。更改为(注意:更改IP地址!)
<Connector
port="80"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
address="192.168.1.31" />
Run Code Online (Sandbox Code Playgroud)
应该就这么简单吧……对吧?好吧,重新启动 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 添加 iplisten ipaddress=192.168.1.30
现在我重新启动 TeamCity 的 Web 服务器,瞧,它起作用了!!我可以浏览到 192.168.1.31而无需指定端口号,TeamCity 的 Web 界面就会出现。快速的完整性检查显示 IIS 仍然正确绑定到 192.168.1.30。一切都很好。
对于这么简单的修复,很抱歉发表这么长的帖子。我希望这可以帮助其他人,因为它肯定会为我节省数小时的烦恼。
编辑:使用 TeamCity 一段时间后,我注意到与 TeamCity 一起安装的构建代理没有被正确识别。为了解决这个问题,我必须将构建代理指向 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。