Jenkins Slave Shows as Offline

I have inherited Jenkins form a previous co-worker. Unfortunately, he did this without bringing anyone else on it, so my knowledge of Jenkins is nothing more than writing scripts and throwing them up in the dashboard. I apologize upfront for missing something if I did.

I noticed this week that a couple of reports weren't coming in. When I jumped on the Jenkins dashboard, it shows that the slave is offline. I logged into the Windows server where the Jenkins slave is installed, I tried to run the exe, and get this error:

Unable to Run Jenkins-Slave.exe

So that's when I checked out the services, and found out that the Jenkins service wasn't running. I tried to run it, and I get this error:

Unable to Run Jenkins Slave Service

Because I don't really understand the ins and outs of this, I'm not too sure how to fix it. I tried restarting the server where the slave is located as well as restarting the master, but I don't get any change.

Again, I'm not too savvy with this, so any help would be greatly appreciated!

Edit: Requested by commentors, this is the information I am seeing from the logs. Looking at the slave.out.log, all I am seeing is this repeating:

Both error and output logs will be printed to C:\Temp\JenkinsSlave\remoting

I am seeing this in the slave.err.log. These are the last entries in there. They are the exact same logs that were in the log file located at C:\Temp\JenkinsSlave\remoting:

Jul 28, 2018 7:01:46 PM hudson.remoting.jnlp.Main$CuiListener status INFO: Connecting to jenkinsmaster:61069 Jul 28, 2018 7:01:46 PM hudson.remoting.jnlp.Main$CuiListener status INFO: Server reports protocol JNLP4-plaintext not supported, skipping Jul 28, 2018 7:01:46 PM hudson.remoting.jnlp.Main$CuiListener status INFO: Server reports protocol JNLP3-connect not supported, skipping Jul 28, 2018 7:01:46 PM hudson.remoting.jnlp.Main$CuiListener status INFO: Server reports protocol JNLP2-connect not supported, skipping Jul 28, 2018 7:01:46 PM hudson.remoting.jnlp.Main$CuiListener status INFO: Server reports protocol JNLP-connect not supported, skipping Jul 28, 2018 7:01:46 PM hudson.remoting.jnlp.Main$CuiListener error SEVERE: The server rejected the connection: None of the protocols were accepted java.lang.Exception: The server rejected the connection: None of the protocols were accepted at hudson.remoting.Engine.onConnectionRejected(Engine.java:655) at hudson.remoting.Engine.innerRun(Engine.java:619) at hudson.remoting.Engine.run(Engine.java:455)

Edit 1: So I was able to bring the slave back online thanks to @MichaelPowers. This was done by performing step 4 in this documentation: How to Setup a node. This worked to bring the slave back online, but I am still unable to run jobs tied to the slave. In the logs, I am seeing this:

`

Aug 06, 2018 1:20:43 PM hudson.remoting.UserRequest perform WARNING: LinkageError while performing UserRequest:hudson.util.RemotingDiagnostics$GetThreadDump@df9d05 java.lang.LinkageError: Failed to load hudson.init.InitMilestone at hudson.remoting.RemoteClassLoader.loadClassFile(RemoteClassLoader.java:389) at hudson.remoting.RemoteClassLoader.findClass(RemoteClassLoader.java:307) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at hudson.util.RemotingDiagnostics$GetThreadDump.call(RemotingDiagnostics.java:98) at hudson.util.RemotingDiagnostics$GetThreadDump.call(RemotingDiagnostics.java:95) at hudson.remoting.UserRequest.perform(UserRequest.java:212) at hudson.remoting.UserRequest.perform(UserRequest.java:54) at hudson.remoting.Request$2.run(Request.java:369) at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at hudson.remoting.Engine$1.lambda$newThread$0(Engine.java:93) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.NoClassDefFoundError: org/jvnet/hudson/reactor/Milestone at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.lang.ClassLoader.defineClass(Unknown Source) at hudson.remoting.RemoteClassLoader.loadClassFile(RemoteClassLoader.java:383) ... 14 more Caused by: java.lang.ClassNotFoundException: org.jvnet.hudson.reactor.Milestone at hudson.remoting.RemoteClassLoader.findClass(RemoteClassLoader.java:317) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 18 more Caused by: java.nio.file.AccessDeniedException: C:\Temp\JenkinsSlave\remoting\jarCache\1D\802F741B5EFFEF0E027F560ADF37AB.jar at sun.nio.fs.WindowsException.translateToIOException(Unknown Source) at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source) at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source) at sun.nio.fs.WindowsFileAttributeViews$Basic.setFileTimes(Unknown Source) at sun.nio.fs.WindowsFileAttributeViews$Basic.setTimes(Unknown Source) at java.nio.file.Files.setLastModifiedTime(Unknown Source) at hudson.remoting.FileSystemJarCache.lookInCache(FileSystemJarCache.java:77) at hudson.remoting.JarCacheSupport.resolve(JarCacheSupport.java:46) at hudson.remoting.ResourceImageInJar._resolveJarURL(ResourceImageInJar.java:90) at hudson.remoting.ResourceImageInJar.resolve(ResourceImageInJar.java:43) at hudson.remoting.RemoteClassLoader.findClass(RemoteClassLoader.java:304) ... 20 more` 

Is there another way to update the slave?

I am also getting this in an email from the failed jobs:

`java.lang.ClassNotFoundException: org.jenkinsci.plugins.gitclient.Git$1 at java.net.URLClassLoader.findClass(Unknown Source) at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at com.sun.jnlp.JNLPClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at java.io.ObjectInputStream.resolveClass(Unknown Source) at hudson.remoting.MultiClassLoaderSerializer$Input.resolveClass(MultiClassLoaderSerializer.java:134) at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source) at java.io.ObjectInputStream.readClassDesc(Unknown Source) at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) at java.io.ObjectInputStream.readObject0(Unknown Source) at java.io.ObjectInputStream.defaultReadFields(Unknown Source) at java.io.ObjectInputStream.readSerialData(Unknown Source) at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) at java.io.ObjectInputStream.readObject0(Unknown Source) at java.io.ObjectInputStream.readObject(Unknown Source) at hudson.remoting.UserRequest.deserialize(UserRequest.java:291) at hudson.remoting.UserRequest.perform(UserRequest.java:190) Also: hudson.remoting.Channel$CallSiteStackTrace: Remote call to JNLP4-connect connection from at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1741) at hudson.remoting.UserRequest$ExceptionResponse.retrieve(UserRequest.java:357) at hudson.remoting.Channel.call(Channel.java:955) at hudson.FilePath.act(FilePath.java:1036) at hudson.FilePath.act(FilePath.java:1025) at org.jenkinsci.plugins.gitclient.Git.getClient(Git.java:137) at hudson.plugins.git.GitSCM.createClient(GitSCM.java:821) at hudson.plugins.git.GitSCM.createClient(GitSCM.java:812) at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1180) at hudson.scm.SCM.checkout(SCM.java:504) at hudson.model.AbstractProject.checkout(AbstractProject.java:1208) at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:574) at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86) at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:499) at hudson.model.Run.execute(Run.java:1798) at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43) at hudson.model.ResourceController.execute(ResourceController.java:97) at hudson.model.Executor.run(Executor.java:429) Caused: java.lang.ClassNotFoundException: Failed to deserialize the Callable object. Perhaps you needed to implement DelegatingCallable? at hudson.remoting.UserRequest.perform(UserRequest.java:192) at hudson.remoting.UserRequest.perform(UserRequest.java:54) at hudson.remoting.Request$2.run(Request.java:369) at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at hudson.remoting.Engine$1.lambda$newThread$0(Engine.java:93) at java.lang.Thread.run(Unknown Source) Caused: java.io.IOException: Remote call on JNLP4-connect connection from failed at hudson.remoting.Channel.call(Channel.java:959) at hudson.FilePath.act(FilePath.java:1036) at hudson.FilePath.act(FilePath.java:1025) at org.jenkinsci.plugins.gitclient.Git.getClient(Git.java:137) at hudson.plugins.git.GitSCM.createClient(GitSCM.java:821) at hudson.plugins.git.GitSCM.createClient(GitSCM.java:812) at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1180) at hudson.scm.SCM.checkout(SCM.java:504) at hudson.model.AbstractProject.checkout(AbstractProject.java:1208) at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:574) at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86) at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:499) at hudson.model.Run.execute(Run.java:1798) at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43) at hudson.model.ResourceController.execute(ResourceController.java:97) at hudson.model.Executor.run(Executor.java:429)` 

Final Edit:

Good news, I guess that once the was able to bring the slave back online, all I needed to do was to update the plugins. I went to Manage Jenkins > Manage Plugins and was able to update all of the plugins that were in need of it. After the restart, I was able to run jobs tied to the slave without issue.

Thanks again for the help!

2

1 Answer

This error occurs when your Jenkins master and slave disagree on which protocol to use. This generally happens when the server gets upgraded (either in version or security policy) and the slave isn't able to talk anymore because the master and server no longer speak any common dialects.

First thing to try is upgrading the Jenkins slave runner (see step 4).

If that doesn't resolve it the other option is to allow older dialects of the Jenkins protocol in your master. You can do this by going to Manage Jenkins -> Configure Global Security -> Agents -> Agent Protocols... Picture of Agent Protocol selector in Jenkins

Simply check one of the protocols that the slave supports and the slave should be able to connect again. You may get security warnings in the Jenkins console though, since these protocols are typically disabled for a reason.

1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

You Might Also Like