Closed timja closed 5 years ago
Are you sure that you use 1.566?
I don't see any NPE chance in https://github.com/jenkinsci/jenkins/blob/jenkins-1.566/core/src/main/java/hudson/model/Slave.java
353: public Launcher createLauncher(TaskListener listener) { 354:SlaveComputer c = getComputer(); 355:if (c == null) { 356: listener.error("Issue with creating launcher for slave " + name + "."); 357: return new Launcher.DummyLauncher(listener); 358:} else { 359: return new RemoteLauncher(listener, c.getChannel(), c.isUnix()).decorateFor(this); 360:} 361: }
Definitely using 1.566 (assuming the version shown at the bottom of the page is accurate!), but I agree, if that's the code running in 1.566, I don't see where there can be an NPE, unless there is some unboxing going on which is not evident by seeing just that fragment.
Well hey, how about that.
/** * True if this computer is a Unix machine (as opposed to Windows machine). * * @return * null if the computer is disconnected and therefore we don't know whether it is Unix or not. */ public Boolean isUnix() { return isUnix; }
… and the constructor takes only a boolean.
Sorry, I've missed the previous message...
trejkaz is right. The implicit unboxing of null Boolean values throws NPE according to Java specs.
It's weird how a job can be scheduled for a node before it could be determined whether it's Unix.
My guess would be that despite isUnix being set in a synchronized{} block, isUnix() is not synchronised, so a second thread getting the value might be getting an out of date value.
Another stacktrace for Jenkins Pipeline:
java.lang.NullPointerException at hudson.model.Slave.createLauncher(Slave.java:417) at org.jenkinsci.plugins.workflow.support.DefaultStepContext.makeLauncher(DefaultStepContext.java:112) at org.jenkinsci.plugins.workflow.support.DefaultStepContext.get(DefaultStepContext.java:68) at org.jenkinsci.plugins.workflow.steps.StepDescriptor.checkContextAvailability(StepDescriptor.java:251) at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:179) at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:126) at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:108) at groovy.lang.GroovyObject$invokeMethod.call(Unknown Source)
Duplicated by JENKINS-38527 perhaps?
Likely
[Duplicates: JENKINS-38527]
Jenkins failed some test on 2 configurations out of a 5-configuration matrix build, with the other 3 builds completing normally. Both failed slaves leave no additional information for diagnosing the root cause:
JENKINS-21999seemed to be a similar issue but the line numbers have changed and that issue was fixed, whereas this issue still occurs.Originally reported by trejkaz, imported from: NPE in Slave.createLauncher() for Matrix and Pipeline jobs