Как запустить несколько экземпляров TeamCity на одном сервере?

Я нахожусь в Windows и пытаюсь запустить несколько (в настоящее время двух) экземпляров TeamCity на одном сервере. Я решил не устанавливать службы Windows и вместо этого запускать сервер с помощью команды запуска runAll.bat. Когда я запускал программу установки, я выбрал разные порты, имена и пути для каждого из них. Первый сервер запускается успешно, а второй - нет - я вижу, что окно tomcat появляется, но прошло некоторое время, хотя окно агента сборки остается. Здесь некоторый вывод:

c:\Tools\TeamCity\bin>runAll.bat start
starting TeamCity server and agent...
Using CATALINA_BASE:   "c:\Tools\TeamCity\bin\.."
Using CATALINA_HOME:   "c:\Tools\TeamCity\bin\.."
Using CATALINA_TMPDIR: "c:\Tools\TeamCity\bin\..\temp"
Using JRE_HOME:        "c:\Tools\TeamCity\bin\..\jre"
Using CLASSPATH:       "c:\Tools\TeamCity\bin\..\bin\bootstrap.jar"
Starting TeamCity Build Agent Launcher...
Agent home directory is C:\Tools\TeamCity\buildAgent
Current JRE version is 1.6

c:\Tools\TeamCity\bin>cd c:\Tools\TeamCity2\bin

c:\Tools\TeamCity2\bin>runAll.bat start
starting TeamCity server and agent...
Using CATALINA_BASE:   "c:\Tools\TeamCity2\bin\.."
Using CATALINA_HOME:   "c:\Tools\TeamCity2\bin\.."
Using CATALINA_TMPDIR: "c:\Tools\TeamCity2\bin\..\temp"
Using JRE_HOME:        "c:\Tools\TeamCity2\bin\..\jre"
Using CLASSPATH:       "c:\Tools\TeamCity2\bin\..\bin\bootstrap.jar"
Starting TeamCity Build Agent Launcher...
Agent home directory is C:\Tools\TeamCity2\buildAgent
Current JRE version is 1.6

Ответ 1

Вам нужно отредактировать conf\server.xml для второго экземпляра Tomcat/TeamCity, чтобы он использовал разные порты или привязки к различным сетевым интерфейсам, поэтому необходимо изменить следующие порты:

  • Server port="8005"
  • Connector port="8080"

Два сервера не могут совместно использовать одну и ту же базу данных, поэтому вы должны настроить их для использования разных местоположений с помощью переменной TEAMCITY_DATA_PATH.

Если вы также хотите запустить несколько агентов на одном компьютере, обратитесь к моему ответу здесь.

Ответ 2

Можно создать более одного сервера TeamCity в одном и том же окне Windows, что и службы Windows.

В следующей процедуре предполагается, что вы хотите установить 3 экземпляра TeamCity TeamCity1, TeamCity2 и TeamCity3 на портах 8080, 8081 и 8082 соответственно. Если вы измените какую-либо из этих деталей, убедитесь, что вы остаетесь неизменными во время этой процедуры. Каждый экземпляр ДОЛЖЕН работать под другой учетной записью пользователя Windows, чтобы эта процедура работала. Это было сделано с TeamCity 7.1, я не уверен, что он работает с другими версиями.

Вот процедура:

  • Установите TeamCity, выберите "C:\TeamCity1" в качестве папки назначения.

  • Снимите флажок Build Agent (как Windows Service, так и Core) - они будут установлены позже.

  • Снимите флажок Службы Windows для сервера, но оставьте ядро.

  • Используйте "C:\TeamCity1\TeamCityData \" в качестве каталога конфигурации.

  • Выберите уникальный порт для этого экземпляра. Я выбрал 8080, 8081 и 8082.

  • Повторите шаги 1-5 столько раз, сколько нужно, изменив значение TeamCity2, TeamCity3 и т.д. и каждый раз меняя порт.

  • Откройте "Управление компьютером" в "Администрирование" и создайте 1 уникальную учетную запись пользователя Windows для каждой службы (например, TeamCity1, TeamCity2 и TeamCity3). Убедитесь, что пароли не истекают. Пока что убедитесь, что у каждого пользователя достаточно полномочий для входа в Windows.

  • Откройте командную строку с повышенными правами, выбрав "Все программы" > "Стандартные" > "Командная строка", щелкните правой кнопкой мыши и выберите "Запуск от имени администратора".

  • Запустите команды в конце этой процедуры для каждого экземпляра TeamCity, заменив номер 1 соответствующим экземпляром TeamCity.

  • Для каждой учетной записи вам необходимо добавить "Вход в систему как услугу". Легкий способ сделать это - открыть "Службы из административных средств", щелкнуть правой кнопкой мыши по каждой службе, перейдите на вкладку "Вход в систему", введите пароль в обоих полях и нажмите "Применить".

  • Выйдите из машины и войдите в систему как "TeamCity1".

  • Перейдите в Панель управления > Учетные записи пользователей > Учетные записи пользователей > Измените мои переменные среды.

  • Добавьте новую переменную пользователя, щелкнув Создать... Назовите ее TEAMCITY_DATA_PATH со значением C:\TeamCity1\TeamCityData.

  • Повторите шаги 11-13 для каждого экземпляра TeamCity.

  • Выход из системы и вход в систему с учетной записью администратора.

  • Вернитесь в диалог переменных среды и удалите Системную переменную (не переменную пользователя) с именем TEAMCITY_DATA_PATH.

  • При необходимости измените разрешения для каждой учетной записи пользователя TeamCity, чтобы у них не было разрешения на вход в систему.

  • Откройте C:\TeamCity1\conf\server.xml и C:\TeamCity1\conf\server-standard.xml и измените порт сервера = 8105 на другой выбранный вами порт. Убедитесь, что вы используете SAME PORT в обоих файлах. Повторите для каждого экземпляра TeamCity.

  • Запустите каждую службу и подключитесь к своему браузеру, чтобы настроить каталог данных для каждого из них. Мне пришлось остановить все экземпляры службы teamcity, кроме текущего, или я получил ошибку "клиент не аутентифицирован" во время процесса сборки, но после завершения они, похоже, работают нормально.

  • Настройте доступ к базе данных по мере необходимости.

  • Используйте эти инструкции для установить несколько агентов сборки на одном компьютере. Я не думаю, что можно разделить агент между экземплярами TeamCity, поскольку связь является двухсторонней, и, похоже, нет способа настроить более одного порта, поэтому лучше всего установить агентов в C:\TeamCity1\buildAgent1\named TeamCity1BuildAgent1, C:\TeamCity1\buildAgent2\named TeamCity1BuildAgent2, C:\TeamCity2\buildAgent1\named TeamCity2BuildAgent1 и т.д.

  • Если вы хотите использовать стандартные порты для каждого экземпляра TeamCity (80 и/или 443), следуйте этим инструкциям, чтобы использовать IIS в качестве прокси для Tomcat.

Run these commands at step #9 above

sc create TeamCity1 binPath= "\"C:\TeamCity1\bin\TeamCityService.exe\" jetservice \"/settings=C:\TeamCity1\conf\teamcity-server-service.xml\" \"/LogFile=C:\TeamCity1\logs\teamcity-winservice.log\"" DisplayName= "TeamCity Server 1" start= auto obj= ".\TeamCity1" password= "Password1"

sc description "TeamCity1" "JetBrains TeamCity server service 1"

NOTE: teamcity is misspelled as "teamicty" as the name of the config file in some builds. 
This is a TeamCity bug, make sure you correct the file name before 
executing these commands.