Після двох повних днів «досліджень» (читайте: стукаючи головою об клавіатуру) і проклинаючи документацію на TeamCity / MSDN / Tomcat, а також фантомні прив’язки IIS, я придумав відповідь на дуже заплутане питання: Як можна Я змінюю IP-адресу та номер порту TeamCity на багатодомному сервері під керуванням Windows Server 2008, а також IIS 7, який служить необхідній меті? .
По-перше, трохи тла. На нашому сервері збирання працює Windows Server 2008 з двома IP-адресами (192.168.1.30 та 192.168.1.31) в одному NIC. Я налаштував 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: \ Користувачі \ .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 add 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 і агент BuildCity Build.