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.

This article is part of our Knowledge Base and is provided for guidance-based purposes only. The solutions or workarounds described here are not officially supported by CloudBees and may not be applicable in all environments. Use at your own discretion, and test changes in a safe environment before applying them to production systems.