После двух полных дней «исследований» (читай: стучать головой по клавиатуре) и ругательств в документации TeamCity / MSDN / Tomcat, а также фантомных привязок IIS я пришел к ответу на очень непонятную проблему: как можно Я изменяю IP-адрес и номер порта TeamCity на многосетевом сервере под управлением Windows Server 2008, а также IIS 7, который служит необходимой цели? ,
Сначала немного предыстории. Наш сервер сборки работает под управлением Windows Server 2008 с двумя IP-адресами (192.168.1.30 и 192.168.1.31) на одной сетевой карте. Я настроил IIS для явного связывания своего единственного сайта с 192.168.1.30 на порте 80. На данный момент я думаю, что 192.168.1.31 широко открыт и готов к использованию для TeamCity ... не совсем.
Первое раздражение: при установке TeamCity он полностью игнорирует тот факт, что с этим сервером связано несколько IP-адресов, спрашивающих только, к какому порту он должен быть привязан. Для серверного программного обеспечения это довольно удивительно.
Второе раздражение: TeamCity по умолчанию использует порт 8080 (что?). Из-за первого раздражения выбор порта несколько неоднозначен: собирается ли TeamCity связываться с портом 8080 на обоих IP-адресах? Изменение выбора порта на 80 выдает предупреждение о том, что другой сервис уже связан с портом 80. Хм, IIS должен быть связан только с портом 80 на 192.168.1.30; ничто не должно быть связано с 192.168.1.31. Очевидно, TeamCity конкурирует с IIS 192.168.1.30.
Завершая установку TeamCity, после выбора порта 80 и игнорирования предупреждения о привязке я открываю «C: \ TeamCity \ server.xml». Sidenote: «C: \ TeamCity \» является каталогом установки по умолчанию для TeamCity, а «C: \ Users \ .BuildServer» является каталогом данных по умолчанию . В любом случае, «server.xml» - это файл конфигурации, в котором вы можете установить такие параметры, как порт и IP-адрес веб-интерфейса TeamCity. После небольшого исследования я придумал конфигурацию для привязки IP-адреса 192.168.1.31 к порту 80:
Ищите либо
<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 (через диспетчер служб Windows) ничего не дает на 192.168.1.31. Тьфу.
Оказывается, что хотя один и единственный сайт IIS явно привязан к 192.168.1.30 на порту 80, IIS все еще прослушивает все IP-адреса. Это, конечно, отбрасывает веб-сервер TeamCity (Tomcat), который останавливается еще до того, как он выходит в сеть. После ручного запуска Tomcat из командной строки, чтобы проанализировать его ошибку stdout и еще больше исследований, я наткнулся на этот маленький драгоценный камень из StackOverflow: Как я могу контролировать, какой IP-адрес использует IIS7?
Итак, из административной командной строки, которую я запускаю ( примечание: снова измените IP-адрес! На этот раз на IP-адрес, к которому вы хотите привязать IIS )
netsh http добавить iplisten ipaddress = 192.168.1.30
Теперь я перезагружаю веб-сервер TeamCity и вуаля, все работает !! Я могу перейти к 192.168.1.31 без указания номера порта и веб-интерфейса TeamCity. Быстрая проверка работоспособности показывает, что IIS все еще правильно связан с 192.168.1.30. Все хорошо.
Извините за длинный пост за такое простое исправление. Я надеюсь, что это поможет кому-то еще, поскольку это, несомненно, спасло бы меня от многих часов обострения.
Редактировать: После использования TeamCity некоторое время я заметил, что агент сборки, который был установлен с TeamCity, не распознавался правильно. Чтобы это исправить, мне пришлось указать агенту сборки новый URL-адрес для TeamCity. Это изменение конфигурации выполняется в "C: \ TeamCity \ buildAgent \ conf \ buildAgent.properties". Опять же, это путь для установки TeamCity по умолчанию, и он может отличаться в зависимости от того, как вы настраиваете установку TeamCity.
Внутри buildAgent.properties убедитесь, что serverUrl указывает на новый URL-адрес TeamCity. В моем случае я обновил его до:
ServerURL = HTTP \: //192.168.1.31
После внесения этого изменения перезапустите как TeamCity Web Server, так и TeamCity Build Agent.