在Tomcat上启动Jenkins时遭遇InstanceIdentity单例缺失错误
Hey there, let's tackle this InstanceIdentity singleton issue you're hitting when firing up Jenkins on Tomcat. This error usually pops up when Jenkins can't initialize its identity key pair properly—often tied to file permissions or corrupted Jenkins home directory files. Here are the most common fixes to get you back up and running:
Common Fixes to Try
Check Jenkins Home Directory Permissions
Make sure the user running Tomcat has full read/write access to your Jenkins home folder. If Tomcat can't write to this directory, it can't generate or access the InstanceIdentity files. On Linux systems, you can run something like:chown -R tomcat:tomcat /path/to/your/jenkins_home chmod -R 755 /path/to/your/jenkins_homeAdjust the user/group and path to match your specific setup.
Delete Corrupted InstanceIdentity Files
Sometimes the identity files get corrupted. Navigate to your Jenkins home directory, look for theidentity.key.encandinstance-identity.xmlfiles, delete them, then restart Tomcat. Jenkins will automatically regenerate these files on startup.Verify Jenkins and Tomcat Compatibility
Double-check that your Jenkins version is compatible with the Tomcat version you're using. Mismatched versions can cause odd initialization issues like this one.Rule Out Plugin Conflicts
If you recently added or updated plugins, try starting Jenkins with plugins disabled to eliminate conflicts. You can do this by adding--disable-pluginsto your Jenkins startup arguments, or by temporarily renaming thepluginsfolder in your Jenkins home directory.
Error Details You Provided
请求处理过程中出现问题。请查看我们的bug追踪器,确认是否已有类似问题报告。若已存在,请投票并添加评论以评估问题影响;若为新问题,请提交新工单,提交时需附上完整堆栈跟踪、Jenkins版本及相关插件信息,用户列表也有助于排查问题。
Stack Trace
java.lang.AssertionError: InstanceIdentity is missing its singleton at org.jenkinsci.main.modules.instance_identity.InstanceIdentity.get(InstanceIdentity.java:133) at org.jenkinsci.main.modules.instance_identity.InstanceIdentityRSAProvider.getKeyPair(InstanceIdentityRSAProvider.java:23) at jenkins.model.identity.InstanceIdentityProvider$KeyTypes.get(InstanceIdentityProvider.java:161) at jenkins.model.identity.InstanceIdentityProvider$KeyTypes.getKeyPair(InstanceIdentityProvider.java:210) at jenkins.model.identity.IdentityRootAction.getUrlName(IdentityRootAction.java:42) at jenkins.model.Jenkins.getUnprotectedRootActions(Jenkins.java:4695) at jenkins.model.Jenkins.isSubjectToMandatoryReadPermissionCheck(Jenkins.java:4667) at jenkins.model.Jenkins.getTarget(Jenkins.java:4645) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:674) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:649) at org.kohsuke.stapler.Stapler.service(Stapler.java:238) at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) Caused: javax.servlet.ServletException: Servlet execution threw an exception at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:238) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:154) at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:157) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:105) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84) at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) at jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:135) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249) at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:90) at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:171) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.
内容的提问来源于stack exchange,提问作者Suresh

