【Jenkins】slave-agent发生Connection was broken后的一系列问题
问题:使用docker-jenkins 2.60版本服务,使用"launch slave agents via Java Web Start" 方式来添加远程节点,配置完jenkins后,下载slave.jar文件上传到远程机器并执行一下命令:nohupjava -jar slave.jar -jnlpUrl http://******/computer/test/slave-
问题:
使用docker-jenkins 2.60版本服务,使用"launch slave agents via Java Web Start" 方式来添加远程节点,配置完jenkins后,下载slave.jar文件上传到远程机器并执行一下命令:
nohup java -jar slave.jar -jnlpUrl http://******/computer/test/slave-agent.jnlp -secret 07694baafd*******1e1f23b > agent.log 2>&1 &
然后slave节点日志报错:
java.io.IOException: Connection aborted: org.jenkinsci.remoting.nio.NioChannelHub$MonoNioTransport@7029f3e3[name=windows_02]
at org.jenkinsci.remoting.nio.NioChannelHub$NioTransport.abort(NioChannelHub.java:208)
at org.jenkinsci.remoting.nio.NioChannelHub.run(NioChannelHub.java:628)
at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
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:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:197)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
at org.jenkinsci.remoting.nio.FifoBuffer$Pointer.receive(FifoBuffer.java:136)
at org.jenkinsci.remoting.nio.FifoBuffer.receive(FifoBuffer.java:306)
at org.jenkinsci.remoting.nio.NioChannelHub.run(NioChannelHub.java:561)
jenkins前端页面报错:
Connection was broken
java.io.IOException: Failed to abort
at org.jenkinsci.remoting.nio.NioChannelHub$NioTransport.abort(NioChannelHub.java:184)
at org.jenkinsci.remoting.nio.NioChannelHub.abortAll(NioChannelHub.java:599)
at org.jenkinsci.remoting.nio.NioChannelHub.run(NioChannelHub.java:481)
at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:695)
Caused by: java.nio.channels.ClosedChannelException
at sun.nio.ch.SocketChannelImpl.shutdownInput(SocketChannelImpl.java:663)
at sun.nio.ch.SocketAdaptor.shutdownInput(SocketAdaptor.java:430)
at org.jenkinsci.remoting.nio.Closeables$1.close(Closeables.java:20)
at org.jenkinsci.remoting.nio.NioChannelHub$MonoNioTransport.closeR(NioChannelHub.java:289)
at org.jenkinsci.remoting.nio.NioChannelHub$NioTransport$1.call(NioChannelHub.java:226)
at org.jenkinsci.remoting.nio.NioChannelHub$NioTransport$1.call(NioChannelHub.java:224)
at org.jenkinsci.remoting.nio.NioChannelHub.run(NioChannelHub.java:474)
排查与解决:
因为agent的插件版本依赖的库与当前jdk环境不同,还有就是jenkins提示了很多插件的版本不支持2.60,所以为了保持dockjer-Jenkins内部使用的jdk版本和服务器节点使用的jdk版本相同就先升级docker-jenkins到2.138.3版本,然后下载新的slave jar包
(最新的是agent.jar)去执行node命令进行链接,但是又报了下面的错误:
Exception in thread "main" java.lang.UnsupportedClassVersionError: hudson/remoting/Launcher : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
(根据错误去查询这个错误,java的开发者文档:https://docs.oracle.com/javase/8/docs/api/index.html,文档解释
Thrown when the Java Virtual Machine attempts to read a class file and determines that the major and minor version numbers in the file are not supported. )
ok,发现是jdk的版本不同,底层库文件不支持,所以还是忘记升级一下服务器的jdk到1.8,升级一下完事再执行就可以了。
总结:
1.linux服务上如果需要使用的jdk与现有的版本不一样时,不要随意升级,因为会影响到其他项目的服务,可以通过指定java的绝对路径来使用高版本或低版本的java.exe(这样就可以继续使用,不会因为升级jdk而导致环境jvm不可用)
2.xshell终端操作升级java版本修改path路径(其实建议所有环境保持一致,还有就是tty修改完path,记得source,然后exit再login)
更多推荐
所有评论(0)