我在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
你需要编辑 conf\server.xml
对于第二个Tomcat / TeamCity实例,它使用不同的端口或绑定到不同的网络接口,更改以下端口应该足够了:
Server port="8005"
Connector port="8080"
两台服务器无法共享同一个数据库,因此您必须将它们配置为使用不同的位置 TEAMCITY_DATA_PATH 环境变量。
如果您还想在同一台计算机上运行多个代理程序, 请参考我的答案。
可以在与Windows服务相同的Windows框上运行多个TeamCity服务器。
以下过程假定您要分别在端口8080,8081和8082上安装3个名为TeamCity1,TeamCity2和TeamCity3的TeamCity实例。如果您更改了这些细节,请确保在整个过程中保持一致。每个实例必须在不同的Windows用户帐户下运行才能使此过程正常工作。这是使用TeamCity 7.1完成的,我不确定它是否适用于其他版本。
这是程序:
安装TeamCity,选择“C:\ TeamCity1”作为目标文件夹。
取消选中Build Agent(Windows服务和Core) - 稍后将安装这些代理。
取消选中Windows Service for Server,但保持核心状态。
使用“C:\ TeamCity1 \ TeamCityData \”作为配置目录。
为此实例选择一个唯一的端口。我选择了8080,8081和8082。
根据需要重复步骤1-5,将其更改为TeamCity2,TeamCity3等,并每次更改端口。
转到“管理工具”中的“计算机管理”,为每个服务(即TeamCity1,TeamCity2和TeamCity3)创建一个唯一的Windows用户帐户。确保密码不会过期。目前,请确保每个用户都有足够的权限登录Windows。
通过转到所有程序>附件>命令提示符,右键单击,然后选择“以管理员身份运行”打开提升的命令提示符。
对于TeamCity的每个实例,在此过程结束时运行命令,将数字1替换为相应的TeamCity实例。
您需要为每个帐户添加“登录即服务”权限。简单的方法是从“管理工具”打开“服务”,右键单击每个服务,转到“登录”选项卡,在两个框中重新键入密码,然后单击“应用”。
注销机器并以“TeamCity1”登录。
转到“控制面板”>“用户帐户”>“用户帐户”>“更改环境变量”。
单击New ...添加一个新的User变量。将其命名为TEAMCITY_DATA_PATH,其值为C:\ TeamCity1 \ TeamCityData。
对TeamCity的每个实例重复步骤11-13。
注销并使用Administrator帐户重新登录。
返回环境变量对话框并删除名为TEAMCITY_DATA_PATH的System变量(不是用户变量)。
如果需要,请更改每个TeamCity用户帐户的权限,以便他们无权登录。
打开C:\ TeamCity1 \ conf \ server.xml和C:\ TeamCity1 \ conf \ server-standard.xml,将服务器端口= 8105更改为您选择的另一个端口。确保在两个文件中使用SAME PORT。对TeamCity的每个实例重复此操作。
启动每项服务并连接浏览器以配置每个服务的数据目录。我不得不停止除了当前的所有teamcity服务实例,或者在构建过程中遇到“客户端未经过身份验证”错误,但是一旦完成它们似乎工作正常。
根据需要配置数据库访问。
使用这些说明 在同一台计算机上安装多个构建代理。我不相信可以在TeamCity实例之间共享代理,因为通信是双向的,并且似乎没有办法配置多个端口,因此最好将代理安装到C: \ TeamCity1 \ buildAgent1 \命名为TeamCity1BuildAgent1,C:\ TeamCity1 \ buildAgent2 \命名为TeamCity1BuildAgent2,C:\ TeamCity2 \ buildAgent1 \命名为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.