在Marathon中设置Team City Build Agent端口号
尝试在Mesosphere Marathon平台上部署teamcity构建代理,并遇到端口映射问题。
默认情况下,teamcity服务器将尝试在端口9090上与teamcity代理交谈
为此,我设置了容器端口,如下所示:
“containerPort”:9090
但是,当我部署teamcity代理容器时,Marathon将端口9090映射到30000范围内的端口。
当teamcity服务器通过端口9090回到容器时,它会失败,因为端口映射到30000。
我已经想出了如何通过在马拉松参数中运行以下sed命令将此动态端口导入teamcity配置文件:
"args": ["sh", "-c", "sed -i -- "s/ownPort=9090/ownPort=$PORT0/g" buildAgent.properties; bin/agent.sh run"],
当容器启动时,它会在buildAgent.properties中换出ownPort = 9090 for ownPort = $ PORT0,然后启动代理。
但是现在代理端口30000上的“containerPort”:9090现在是无效的,它应该是“containerPort”:$ PORT0但是这是无效的json,因为containerPort应该是一个整数。
我已经尝试设置“containerPort”:0,它应该动态分配一个端口,但使用这个值我不能让容器启动它只是马上消失并不断尝试部署它。
我登录到mesos从属主机并运行docker ps -a我可以看到容器端口是空的:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
28*********0 teamcityagent ""sh -c 'sed -i -- 7 minutes ago Exited (137) 2 minutes ago mes************18a8
这是我使用的Marathon json文件,Marathon版本是0.8.2版本:
{
"id": "teamcityagent",
"args": ["sh", "-c", "sed -i -- "s/ownPort=9090/ownPort=$PORT0/g" buildAgent.properties; bin/agent.sh run"],
"cpus": 0.05,
"mem": 4000.0,
"instances": 1,
"container":
{
"type": "DOCKER",
"docker":
{
"image": "teamcityagent",
"forcePullImage": true,
"network": "BRIDGE",
"portMappings":
[
{
"containerPort": 0,
"hostPort": 0,
"servicePort": 0,
"protocol": "tcp"
}
]
}
}
}
任何帮助将不胜感激!
从Marathon Version 0.8.2升级到Marathon Version 0.9.0,使用设置“containerPort”:0,现在可以动态地正确设置端口并启动容器,teamcity服务器现在可以与它通信。
链接地址: http://www.djcxy.com/p/36789.html上一篇: Setting Team City Build Agent Port Number in Marathon
下一篇: Execute PowerShell remotely from TeamCity build using current agent credentials