12

我在 Windows 上并试图在同一台服务器上运行多个(当前是两个)TeamCity 实例。我选择不安装 Windows 服务,而是通过runAll.bat start命令运行服务器。当我运行安装程序时,我为每个选择了不同的端口、名称和路径。第一个服务器成功启动,但第二个没有 - 我看到 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
4

2 回答 2

10

您需要编辑conf\server.xml第二个 Tomcat/TeamCity 实例,使其使用不同的端口或绑定到不同的网络接口,更改以下端口就足够了:

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

两台服务器不能共享同一个数据库,因此您必须通过TEAMCITY_DATA_PATH环境变量将它们配置为使用不同的位置。

如果您还想在同一台机器上运行多个代理,请参阅我的回答here

于 2011-06-07T15:58:43.510 回答
7

可以让多个 TeamCity 服务器与 Windows 服务在同一个 Windows 机器上运行。

以下过程假设您要分别在端口 8080、8081 和 8082 上安装名为 TeamCity1、TeamCity2 和 TeamCity3 的 3 个 TeamCity 实例。如果您更改任何这些详细信息,请确保您在整个过程中与更改保持一致。每个实例必须在不同的 Windows 用户帐户下运行,此过程才能正常工作。这是使用 TeamCity 7.1 完成的,我不确定它是否适用于其他版本。

这是程序:

  1. 安装 TeamCity,选择“C:\TeamCity1”作为目标文件夹。

  2. 取消选中构建代理(Windows 服务和核心) - 这些将在稍后安装。

  3. 取消选中 Server 的 Windows 服务,但保持选中 Core。

  4. 使用“C:\TeamCity1\TeamCityData\”作为配置目录。

  5. 为此实例选择一个唯一端口。我选择了 8080、8081 和 8082。

  6. 根据需要多次重复步骤 1-5,将端口更改为 TeamCity2、TeamCity3 等,并每次更改端口。

  7. 转到管理工具中的计算机管理并为每个服务(即 TeamCity1、TeamCity2 和 TeamCity3)创建 1 个唯一的 Windows 用户帐户。确保密码不会过期。现在,请确保每个用户都有足够的权限登录 Windows。

  8. 通过转到所有程序>附件>命令提示符,右键单击并选择“以管理员身份运行”来打开提升的命令提示符。

  9. 为每个 TeamCity 实例运行此过程结束时的命令,将数字 1 替换为相应的 TeamCity 实例。

  10. 您需要为每个帐户添加“作为服务登录”权限。执行此操作的简单方法是从管理工具打开服务,右键单击每个服务,转到登录选项卡,在两个框中重新输入密码,然后单击应用。

  11. 注销机器并以“TeamCity1”登录。

  12. 转到控制面板 > 用户帐户 > 用户帐户 > 更改我的环境变量。

  13. 通过单击新建添加一个新的用户变量... 将其命名为 TEAMCITY_DATA_PATH,值为 C:\TeamCity1\TeamCityData。

  14. 对 TeamCity 的每个实例重复步骤 11-13。

  15. 注销并使用管理员帐户重新登录。

  16. 返回环境变量对话框并删除名为 TEAMCITY_DATA_PATH 的系统变量(不是用户变量)。

  17. 如果需要,更改每个 TeamCity 用户帐户的权限,使其无权登录。

  18. 打开 C:\TeamCity1\conf\server.xml 和 C:\TeamCity1\conf\server-standard.xml 并将服务器端口 = 8105 更改为您选择的另一个端口。确保在两个文件中使用相同的端口。对 TeamCity 的每个实例重复此操作。

  19. 启动每个服务并连接浏览器以配置每个服务的数据目录。我不得不停止除当前服务实例之外的所有 teamcity 服务实例,否则在构建过程中出现“客户端未通过身份验证”错误,但一旦完成,它们似乎工作正常。

  20. 根据需要配置数据库访问。

  21. 使用这些说明在同一台机器上安装多个构建代理。我认为不可能在 TeamCity 实例之间共享代理,因为通信是双向的,而且似乎没有办法配置多个端口,因此最好将代理安装到 C: \TeamCity1\buildAgent1\ 命名为 TeamCity1BuildAgent1,C:\TeamCity1\buildAgent2\ 命名为 TeamCity1BuildAgent2,C:\TeamCity2\buildAgent1\ 命名为 TeamCity2BuildAgent1 等。

  22. 如果您想为每个 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.
于 2012-11-02T15:34:59.413 回答