问题描述
使用Jenkins提供的标准docker映像时,我遇到了一个奇怪的问题-仅当Jenkins在Amazon Linux 2上运行时。在Ubuntu 18.04上的Jenkins正常工作。
问题在于Jenkins无法启动这些从属容器。
连接方法-“附加Docker容器”,因为Docker引擎在Jenkins服务器上本地运行。
有趣的是,如果我在新的DockerFile中设置USER root
(在Ubuntu上不需要),我已经能够使这些容器在Amazon Linux上成功运行。但是,为了运行postgres的单元测试,我需要以非root用户(如jenkins用户)身份运行它们。
关于如何在Amazon Linux 2上实现这一目标的任何想法?我会在操作系统上缺少docker设置或安全设置吗?
我测试过的Docker映像:
- https://hub.docker.com/r/jenkins/agent/
- https://hub.docker.com/r/jenkins/jnlp-slave
- https://hub.docker.com/r/jenkins/inbound-agent
错误不是很有帮助:
连接到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-stream 连接:升级 升级:tcp api版本:1.40 Docker实验:false 操作系统:Linux 服务器:Docker / 19.03.13-ce(Linux)
错误:启动代理时发生意外错误。这可能是詹金斯(Jenkins)中的错误
要复制的基本设置:
Docker模板:
解决方法
几天后出现相同的错误。
我们在远程服务器上运行带有Docker Cloud的Docker化Jenkins。 Jenkins在远程服务器上启动包含,但是失败并显示:
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)
,
我今天遇到了这个错误。
问题是这个命令:
${JAVA_EXE}
${JVM_ARGS}
-jar
${FS_DIR}/${JAR_NAME}
-noReconnect
-noKeepAlive
-slaveLog
${FS_DIR}/agent.log
这是Jenkins master执行的控制节点的命令。问题是slaveLog参数,现在是agentLog。我在这个 Jenkins 问题线程 (Remote.jar is not working anymore because of changed parameter slave.jar->agent.jar) 中发现了它。
您可以通过在 Docker 模板配置中定义 Entrypoint CMD 并更改错误参数来解决此问题:
${JAVA_EXE}
${JVM_ARGS}
-jar
${FS_DIR}/${JAR_NAME}
-noReconnect
-noKeepAlive
-agentLog
${FS_DIR}/agent.log
此后,Jenkins 可以管理节点。如果也适合您,请告诉我。
幸福大厦。