2
votes

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 fhiscripts1.fhi.com/10.1.1.126:62844
                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 fhiscripts1.fhi.com/10.1.1.126:62844 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!

1
There should be a set of logs in the directory you found jenkins-slave.exe in, usually named jenkins-slave.out.log and jenkins-slave.err.log. Do those exist? Are there relevant errors/exceptions in there?Michael Powers
@MichaelPowers I have updated the post with the logs. Looks like something is blocking the connection? The master server is in Azure, and the slave is on-prem. I'm a little over my head with the java stuff to be honest.Huddles18

1 Answers

0
votes

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.