Установка номера порта агента Team City Build в Marathon

Попытка развернуть агент сборки teamcity на платформе Mesosphere Marathon и возникли проблемы с сопоставлением портов.

По умолчанию сервер teamcity будет пытаться поговорить с агентом teamcity на порту 9090.

Поэтому я установил порт контейнера так:

«контейнерПорт»: 9090

Однако, когда я развертываю контейнер агента teamcity, Marathon сопоставляет порт 9090 с портом в диапазоне 30000.

Когда сервер teamcity обращается к контейнеру через порт 9090, он терпит неудачу, потому что порт сопоставлен с 30000.

Я выяснил, как добавить этот динамический порт в конфигурационный файл teamcity, выполнив следующую команду sed в аргументах marathon:

"args": ["sh", "-c", "sed -i -- \"s/ownPort=9090/ownPort=$PORT0/g\" buildAgent.properties; bin/agent.sh run"],

Когда контейнер развернут, он заменит ownPort = 9090 на ownPort = $ PORT0 в buildAgent.properties, а затем запустит агент.

Однако теперь, когда агент находится на порте 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

Это json-файл Marathon, который я использую, а версия 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"
                }
            ]
        }
    }

}

Любая помощь будет принята с благодарностью!


person Alex Laverty    schedule 16.07.2015    source источник


Ответы (1)


Обновление с Marathon версии 0.8.2 до Marathon версии 0.9.0 устранило проблему, используя настройки «containerPort»: 0, теперь динамически задает порт правильно, и контейнер запускается, и теперь сервер teamcity может обмениваться данными с ним.

person Alex Laverty    schedule 16.07.2015