在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