Использование подчиненных устройств Jenkins Docker в Amazon Linux 2 AMI

#linux #docker #jenkins #amazon-linux

#linux #docker #дженкинс #amazon-linux

Вопрос:

Я столкнулся со странной проблемой, используя стандартные образы docker, предоставленные Jenkins — только тогда, когда Jenkins работает на Amazon Linux 2. Дженкинс в Ubuntu 18.04 работает нормально.

Проблема в том, что Дженкинс не может запускать эти подчиненные контейнеры.

Метод подключения — «Прикрепить контейнер Docker», поскольку механизм docker запущен локально на сервере Jenkins.

Интересно, что мне удалось заставить эти контейнеры успешно запускаться для сборки в Amazon Linux, если я установлю USER root новый файл DockerFile (не требуется в Ubuntu). Однако мне нужно, чтобы они запускались от имени пользователя, не являющегося пользователем root (например, пользователя jenkins), чтобы запустить модульное тестирование для postgres.

Есть мысли о том, как я могу добиться этого для Amazon Linux 2? Может быть, у меня отсутствуют настройки docker или настройки безопасности в ОС?

Изображения Docker, которые я тестировал:

Ошибки не очень полезны:

введите описание изображения здесь

Подключение к контейнеру docker 4486c8f2696f40c7de32160d78d6e2438abb1ff92517c71cf66b93baf3d0877f, запуск команды java -jar /home/jenkins/remoting-4.6.jar -noReconnect -noKeepAlive -slaveLog /home/jenkins/agent.log HTTP/ 1.1 101 ОБНОВЛЕННЫЙ тип содержимого: application/vnd.docker.raw-потоковое подключение: Обновление Обновление: tcp Api-Версия: 1.40 Докер-Экспериментальный:ложный остип: сервер linux: Docker/19.03.13-ce (Linux)

ОШИБКА: непредвиденная ошибка при запуске агента. Вероятно, это ошибка в Jenkins

Базовая настройка для воспроизведения:

введите описание изображения здесь

Шаблон Docker:

введите описание изображения здесь

Ответ №1:

Получаю ту же ошибку уже несколько дней.

Мы запускаем докеризованный Jenkins с облаком Docker на удаленном сервере. Дженкинс запускает contains на удаленном сервере, но затем завершается ошибкой с:

 Connecting to docker container 32cc538f4287d7aaf11952b6cdcf619d92eb054d7d265ea72a3d7a6bdd1cf8d5, running command java -jar /home/jenkins/remoting-4.6.jar -noReconnect -noKeepAlive -slaveLog /home/jenkins/agent.log
HTTP/1.1 101 UPGRADED
Content-Type: application/vnd.docker.raw-stream
Connection: Upgrade
Upgrade: tcp
Api-Version: 1.40
Docker-Experimental: false
Ostype: linux
Server: Docker/19.03.13 (linux)
ERROR: Unexpected error in launching an agent. This is probably a bug in Jenkins
Also:   java.lang.Throwable: launched here
    at hudson.slaves.SlaveComputer._connect(SlaveComputer.java:283)
    at hudson.model.Computer.connect(Computer.java:435)
    at com.nirima.jenkins.plugins.docker.strategy.DockerOnceRetentionStrategy.start(DockerOnceRetentionStrategy.java:80)
    at com.nirima.jenkins.plugins.docker.strategy.DockerOnceRetentionStrategy.start(DockerOnceRetentionStrategy.java:35)
    at hudson.model.AbstractCIBase.updateComputer(AbstractCIBase.java:162)
    at hudson.model.AbstractCIBase.access$000(AbstractCIBase.java:44)
    at hudson.model.AbstractCIBase$2.run(AbstractCIBase.java:224)
    at hudson.model.Queue._withLock(Queue.java:1401)
    at hudson.model.Queue.withLock(Queue.java:1278)
    at hudson.model.AbstractCIBase.updateComputerList(AbstractCIBase.java:207)
    at jenkins.model.Jenkins.updateComputerList(Jenkins.java:1632)
    at jenkins.model.Nodes$2.run(Nodes.java:139)
    at hudson.model.Queue._withLock(Queue.java:1401)
    at hudson.model.Queue.withLock(Queue.java:1278)
    at jenkins.model.Nodes.addNode(Nodes.java:135)
    at jenkins.model.Jenkins.addNode(Jenkins.java:2155)
    at com.nirima.jenkins.plugins.docker.DockerCloud.robustlyAddNodeToJenkins(DockerCloud.java:445)
    at com.nirima.jenkins.plugins.docker.DockerCloud.access$000(DockerCloud.java:68)
    at com.nirima.jenkins.plugins.docker.DockerCloud$1.run(DockerCloud.java:381)
    at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
    at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:68)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
java.io.EOFException: unexpected stream termination
    at hudson.remoting.ChannelBuilder.negotiate(ChannelBuilder.java:415)
    at hudson.remoting.ChannelBuilder.build(ChannelBuilder.java:360)
    at hudson.slaves.SlaveComputer.setChannel(SlaveComputer.java:425)
    at hudson.slaves.SlaveComputer.setChannel(SlaveComputer.java:392)
    at io.jenkins.docker.connector.DockerComputerAttachConnector$DockerAttachLauncher.launch(DockerComputerAttachConnector.java:319)
    at hudson.slaves.DelegatingComputerLauncher.launch(DelegatingComputerLauncher.java:64)
    at io.jenkins.docker.connector.DockerDelegatingComputerLauncher.launch(DockerDelegatingComputerLauncher.java:37)
    at hudson.slaves.SlaveComputer.lambda$_connect$0(SlaveComputer.java:294)
    at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
    at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:80)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
  

Ответ №2:

Сегодня я столкнулся с этой ошибкой.

Проблема заключается в этой команде:

 ${JAVA_EXE}
${JVM_ARGS}
-jar
${FS_DIR}/${JAR_NAME}
-noReconnect
-noKeepAlive
-slaveLog
${FS_DIR}/agent.log
  

Это команда, выполняемая Jenkins master для управления узлом. Проблема в параметре slaveLog, теперь это agentLog. Я обнаружил это в этой теме Jenkins issue (Remote.jar больше не работает из-за измененного параметра slave.jar ->agent.jar ).

Вы можете обойти это, определив CMD точки входа в конфигурации шаблона Docker и изменив неправильный параметр:

 ${JAVA_EXE}
${JVM_ARGS}
-jar
${FS_DIR}/${JAR_NAME}
-noReconnect
-noKeepAlive
-agentLog
${FS_DIR}/agent.log
  

После этого Дженкинс может управлять узлом. Дайте мне знать, если это сработает и для вас.

Счастливого построения.

Комментарии:

1. Благодарим вас за публикацию возможного решения! К сожалению, я думаю, что это отдельная проблема от того, с чем я сталкиваюсь здесь. Я ранее тестировал с этими настройками и получил ту же ошибку. github.com/jenkinsci/docker-plugin/issues/820

2. Еще раз проверяя ваши скриншоты, причиной может быть изображение агента… Пожалуйста, попробуйте использовать образ агента jenkins / agent: jdk11. После этого вы также можете попытаться подключиться к запущенному контейнеру и выполнить команду ‘java -jar /home/jenkins/remoting-4.6.jar -noReconnect -noKeepAlive -slaveLog /home/jenkins/agent.log’.

Ответ №3:

  1. Используйте inbound-agent для образа Docker.
  2. В конфигурации агента поместите home / jenkins в поле Корень удаленной файловой системы, у меня была такая же проблема, и это исправило ее для меня.