问题 如何在同一台服务器上运行多个TeamCity实例?


我在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

3701
2018-06-07 15:34


起源

对这篇文章的进一步标记进行先发制人的打击。这实际上并不违反TeamCity的免费专业版的许可,所以因此停止标记这一点。 - Lasse Vågsæther Karlsen


答案:


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

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

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

如果您还想在同一台计算机上运行多个代理程序, 请参考我的答案


10
2018-06-07 15:58



第二个服务器此时运行,但它报告数据库已在使用中,因此TeamCity无法通过启动阶段。我以为他们会使用另一个数据库(对不起,我不知道Java)。 HSQL database opened (in-process) by another application. SQL error when doing: Connecting to HSQL SQL exception: The database is already in use by another process: lockFile: org.hsqldb.persist.LockFile@6431050a[file =C:\Users\Administrator\.BuildServer\system\buildserver.lck  为什么不看 .BuildServer 2? - Pawel Krakowiak
实际上,目前尚不清楚为什么需要运行2个TeamCity服务器实例。一台服务器只能使用一个数据库/配置。因此,如果您确实需要2台服务器,请通过TEAMCITY_DATA_PATH环境变量为设置指定备用位置。 - KIR
我想在同一台机器上运行两个TeamCity服务器,它们应该使用单独的数据库。我想要实现的是看看这是否允许我在Professional版本中拥有超过20个配置。根据他们的常见问题解答它应该有效,除非我不理解它: jetbrains.com/teamcity/buy/licensing_faq.html#q2 - Pawel Krakowiak
我可以建议只是付钱并停止烦恼自己 - 这是一个很棒的产品,你违背了“如果它的精神” 真 保存你的但是你喜欢它,你买它“它们的定价是基于。 - Ruben Bartelink
从技术上讲,你是对的鲁本。 :-) 1680欧元对于我这么大的企业来说太过分了(不过我需要的时候有1个人+偶尔的分包商)。企业服务器“适用于大型团队和组织”,我不是。我不打算运行几十个并发构建配置,而是希望能够保留一些存档项目,以防客户在10个月后到来并请求一些新功能。认为拥有多个TC实例有助于保存已存档的项目及其构建历史... - Pawel Krakowiak


可以在与Windows服务相同的Windows框上运行多个TeamCity服务器。

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

这是程序:

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

  2. 取消选中Build Agent(Windows服务和Core) - 稍后将安装这些代理。

  3. 取消选中Windows Service for Server,但保持核心状态。

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

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

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

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

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

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

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

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

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

  13. 单击New ...添加一个新的User变量。将其命名为TEAMCITY_DATA_PATH,其值为C:\ TeamCity1 \ TeamCityData。

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

  15. 注销并使用Administrator帐户重新登录。

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

  17. 如果需要,请更改每个TeamCity用户帐户的权限,以便他们无权登录。

  18. 打开C:\ TeamCity1 \ conf \ server.xml和C:\ TeamCity1 \ conf \ server-standard.xml,将服务器端口= 8105更改为您选择的另一个端口。确保在两个文件中使用SAME PORT。对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.

6
2017-11-02 15:34