Ошибка Jenkins Mesos: невозможно получить доступ к jarfile

Я пытаюсь запустить Jenkins, используя динамически генерируемые контейнеры Docker через mesos.

WARNING: Logging before InitGoogleLogging() is written to STDERR
I0120 12:03:47.100700 26501 fetcher.cpp:76] Fetching URI 'http://172.17.20.31:3000/jnlpJars/slave.jar'
I0120 12:03:47.101023 26501 fetcher.cpp:126] Downloading 'http://172.17.20.31:3000/jnlpJars/slave.jar' to '/tmp/mesos/slaves/20150107-091931-521408940-5050-11185-S7/frameworks/20150107-105325-538186156-5050-11332-0354/executors/mesos-jenkins-4bcb550d-bbcf-41ef-9f60-a401f5e4e96d/runs/521ca7ef-1285-4e95-b7bb-09c33faa6286/slave.jar'
I0120 12:03:47.213743 26501 fetcher.cpp:255] Skipped extracting path '/tmp/mesos/slaves/20150107-091931-521408940-5050-11185-S7/frameworks/20150107-105325-538186156-5050-11332-0354/executors/mesos-jenkins-4bcb550d-bbcf-41ef-9f60-a401f5e4e96d/runs/521ca7ef-1285-4e95-b7bb-09c33faa6286/slave.jar'
I0120 12:03:48.002521 26540 exec.cpp:132] Version: 0.21.1
I0120 12:03:48.035147 26543 exec.cpp:206] Executor registered on slave 20150107-091931-521408940-5050-11185-S7
Error: Unable to access jarfile /mnt/mesos/sandbox/slave.jar

Я пытался:

  • ручное добавление файла slave.jar в каталог, указанный в образе контейнера Docker
  • ручное добавление файла slave.jar в каталог, указанный на хосте mesos slave
  • удаление существующего образа докера на подчиненном устройстве, чтобы гарантировать, что подчиненные устройства извлекают самый последний контейнер докера.

Все с тем же результатом.

Какие-либо предложения?


person Blanco    schedule 20.01.2015    source источник
comment
Вы используете github.com/jenkinsci/mesos-plugin? Какой образ докера вы используете? Один из thefactory/jenkins-mesos или folsomlabs/jenkins-mesos?   -  person Adam    schedule 21.01.2015


Ответы (2)


По умолчанию --docker_sandbox_directory имеет значение /mnt/mesos/sandbox, которое должно быть томом в контейнере докеров, который сопоставляется с /tmp/mesos/slaves/<slaveId>/frameworks/<frameworkId>/executors/<executorId>/runs/<taskId>/. Видите ли вы slave.jar в песочнице через веб-интерфейс? Как насчет пути к хосту, указанного в журнале? Действительно ли докер монтирует этот каталог песочницы в /mnt/mesos/sandbox/ внутри контейнера? Каковы разрешения на slave.jar и какой пользователь пытается получить к нему доступ?

person Adam    schedule 21.01.2015
comment
Мне удалось заставить его работать, загрузив slave.jar на хост и смонтировав том хоста в контейнер докера. Я предполагаю, что докер на самом деле не монтировал каталог песочницы в контейнер. Есть ли какая-то конфигурация, которой мне не хватает для динамического выполнения? - person Blanco; 21.01.2015
comment
Если вы используете контейнер-докер (--containerizers=docker,mesos), то песочница должна быть смонтирована автоматически, а окружение MESOS_SANDBOX должно быть установлено соответствующим образом. Можете ли вы выполнить docker inspect и посмотреть, какие тома монтируются по умолчанию? - person Adam; 25.01.2015
comment
У меня именно эта проблема, и копирование файла на хост и настройка «Путь к контейнеру» для указания на этот файл в плагине, похоже, не работает. Есть ли другие известные исправления, или вы придумали что-то более постоянное? @Бланко - person Joseph Sawyer; 10.03.2015
comment
На самом деле мне пришлось указать параметры контейнера Docker в Jenkins, чтобы смонтировать определенный путь, чтобы он работал у меня. Какой дистрибутив вы используете для своих рабов мезоса? Я использовал CentOS 7. @Sawyer - person Blanco; 11.03.2015

Для всех, у кого возникла эта проблема, это было вызвано запуском mesos-slave из контейнера докеров. Мы решили эту проблему, смонтировав эту папку в подчиненное устройство mesos:

/var/lib/mesos/slave:/var/lib/mesos/slave

Таким образом, файлы, записанные в этот каталог внутри подчиненного докера mesos, также будут записаны на главный диск.

person Abhay Agarwal    schedule 03.11.2015