Как запустить несколько экземпляров 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.