NumberFormatException on startup after update

Article ID:115002698491
1 minute readKnowledge base

Issue

After updating to 2.73.3 or 2.89 or later, Jenkins fails to start with an exception like:

SEVERE: Failed to initialize Jenkins
hudson.util.HudsonFailedToLoad: org.jvnet.hudson.reactor.ReactorException: java.lang.Error: java.lang.reflect.InvocationTargetException
        at hudson.WebAppMain$3.run(WebAppMain.java:250)
Caused by: org.jvnet.hudson.reactor.ReactorException: java.lang.Error: java.lang.reflect.InvocationTargetException
   at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:269)
   at jenkins.InitReactorRunner.run(InitReactorRunner.java:47)
   at jenkins.model.Jenkins.executeReactor(Jenkins.java:1099)
   at jenkins.model.Jenkins.<init>(Jenkins.java:904)
   at hudson.model.Hudson.<init>(Hudson.java:86)
   at hudson.model.Hudson.<init>(Hudson.java:82)
   at hudson.WebAppMain$3.run(WebAppMain.java:233)
Caused by: java.lang.Error: java.lang.reflect.InvocationTargetException
    at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:110)
    at hudson.init.TaskMethodFinder$TaskImpl.run(TaskMethodFinder.java:175)
    at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:282)
    at jenkins.model.Jenkins$5.runTask(Jenkins.java:1065)
    at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:210)
    at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117)
    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:748)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:104)
    ... 8 more
Caused by: java.lang.NumberFormatException: For input string: "foob"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:580)
    at jenkins.model.IdStrategy$CaseInsensitive.idFromFilename(IdStrategy.java:306)
    at hudson.model.User$AllUsers.scanAll(User.java:1057)
    ... 13 more

Resolution

Within $JENKINS_HOME/users/, locate the user directory that contains the input string specified in the above NumberFormatException prefixed by a "$" (in the above example, a user containing the string "$foob"). Add 0024 after the "$". For example, if the error string was "foob", and you have a user directory called "mynameis$foobar", you would rename the directory to "mynameis$0024foobar". Do not alter any other parts of the directory name, even if there are additional "$" characters in the name. Restart your Jenkins instance, and repeat this rename as necessary.

More Information

This is caused by the resolution to SECURITY-499, which was disclosed in the Nov 8, 2017 security advisory and resolved in Jenkins LTS version 2.73.3 and Jenkins weekly release 2.89. This migrates user directories containing special characters to a directory without them. This did not, however, account for usernames containing a "$" beforehand. See also JENKINS-47909.