Попытка развернуть агент сборки 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"
}
]
}
}
}
Любая помощь будет принята с благодарностью!