2015-07-16 5 views
0

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

По умолчанию сервер TeamCity попытается поговорить с Teamcity агентом по порту 9090

Therefor Я поставил контейнер порт так:

«containerPort»: 9090

Однако при развертывании контейнер агента teamcity, Marathon отображает порт 9090 в порт в диапазоне 30000.

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

Я понял, как получить этот динамический порт в файл конфигурации TeamCity, выполнив следующие действия СЕПГ команда в марафонских аргументах:

"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 ведомого хост и запустить докер п.с. -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 версия Version 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" 
       } 
      ] 
     } 
    } 

} 

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

ответ

0

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