Jenkins版本:Jenkins 2.32.1版Google登录插件版本:1.3
我得到了这个错误后,我重新启动我的Jenkins,谁能建议我如何解决它?
问题是:
- 我已经确保在插件目录中我有谷歌登录插件启用
- 我没有改变任何插件,只是直接重启
- 我已经很久没有重新开始我的Jenkins了
hudson.util.HudsonFailedToLoad: org.jvnet.hudson.reactor.ReactorException: java.io.IOException: Unable to read /var/lib/jenkins/config.xml
at hudson.WebAppMain$3.run(WebAppMain.java:248)
Caused by: org.jvnet.hudson.reactor.ReactorException: java.io.IOException: Unable to read /var/lib/jenkins/config.xml
at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:269)
at jenkins.InitReactorRunner.run(InitReactorRunner.java:47)
at jenkins.model.Jenkins.executeReactor(Jenkins.java:1110)
at jenkins.model.Jenkins.<init>(Jenkins.java:926)
at hudson.model.Hudson.<init>(Hudson.java:85)
at hudson.model.Hudson.<init>(Hudson.java:81)
at hudson.WebAppMain$3.run(WebAppMain.java:231)
Caused by: java.io.IOException: Unable to read /var/lib/jenkins/config.xml
at hudson.XmlFile.unmarshal(XmlFile.java:161)
at jenkins.model.Jenkins.loadConfig(Jenkins.java:3015)
at jenkins.model.Jenkins.access$1100(Jenkins.java:326)
at jenkins.model.Jenkins$16.run(Jenkins.java:3033)
at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:169)
at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:282)
at jenkins.model.Jenkins$7.runTask(Jenkins.java:1086)
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:1152)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:622)
at java.lang.Thread.run(Thread.java:748)
Caused by: jenkins.util.xstream.CriticalXStreamException: org.jenkinsci.plugins.googlelogin.GoogleOAuth2SecurityRealm : org.jenkinsci.plugins.googlelogin.GoogleOAuth2SecurityRealm
---- Debugging information ----
message : org.jenkinsci.plugins.googlelogin.GoogleOAuth2SecurityRealm
cause-exception : com.thoughtworks.xstream.mapper.CannotResolveClassException
cause-message : org.jenkinsci.plugins.googlelogin.GoogleOAuth2SecurityRealm
class : hudson.model.Hudson
required-type : hudson.model.Hudson
converter-type : hudson.util.RobustReflectionConverter
path : /hudson/securityRealm
line number : 485
version : not available
-------------------------------
at hudson.util.RobustReflectionConverter.doUnmarshal(RobustReflectionConverter.java:356)
at hudson.util.RobustReflectionConverter.unmarshal(RobustReflectionConverter.java:270)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134)
at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1189)
at hudson.util.XStream2.unmarshal(XStream2.java:114)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1173)
at hudson.XmlFile.unmarshal(XmlFile.java:159)
... 11 more
Caused by: com.thoughtworks.xstream.mapper.CannotResolveClassException: org.jenkinsci.plugins.googlelogin.GoogleOAuth2SecurityRealm
at com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:79)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:55)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at com.thoughtworks.xstream.mapper.PackageAliasingMapper.realClass(PackageAliasingMapper.java:88)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:79)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at com.thoughtworks.xstream.mapper.ArrayMapper.realClass(ArrayMapper.java:74)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at com.thoughtworks.xstream.mapper.SecurityMapper.realClass(SecurityMapper.java:71)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at hudson.util.XStream2$CompatibilityMapper.realClass(XStream2.java:282)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at hudson.util.xstream.MapperDelegate.realClass(MapperDelegate.java:43)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:48)
at hudson.util.RobustReflectionConverter.determineType(RobustReflectionConverter.java:461)
at hudson.util.RobustReflectionConverter.doUnmarshal(RobustReflectionConverter.java:327)
... 22 more
5条答案
按热度按时间l2osamch1#
我今天在把Jenkins从
2.176.1
升级到2.176.2
时遇到了类似的问题。那是插件摘要
您的帖子只包含日志文件的一个子集,但在我的案例中,我发现一些条目指出插件是问题的原因。日志中的重要数据片段是:
以及格式相似并传达相似信息的任何其他条目。
根源
我的系统中有一些插件有未完成的更新。当升级服务(例如
apt upgrade jenkins
等)时,服务通常会作为进程的一部分重新启动。重新启动会使问题暴露出来,显示一些插件无法加载,因为它们现在需要更新的依赖项。这些插件不会简单地导致记录错误:它们抛出异常。Jenkins似乎没有准备好处理它们,并崩溃。访问Jenkins主页将显示一个大的堆栈跟踪,除此之外没有其他内容。
问题是,为了正确升级插件,您需要Jenkins启动并运行,但违规的插件 * 阻止 * Jenkins首先进入所需的启动并运行状态。
(我的)解决方案
有几个目标:
1.让Jenkins达到它可以初始化并保持运行状态的程度;
1.获取管理控件的访问权限以升级违规插件;
1.重新启动Jenkins服务并返回正常操作。
继续前的注意事项
在进入下一部分之前,请记住或尝试以下几点:
1.默认情况下,Jenkins安装在
/var/lib/jenkins/
下,其config.xml
文件位于此目录下。在继续 * 之前 * 创建此config.xml
文件的备份!1.你应该有一个足够好的理解,并合理地相信你有一个足够相似的问题证明尝试。
1.关于无法读取
config.xml
的日志消息是假的;它 * 真正 * 想要说的是当它试图加载 * 指定 * 的SAML Java类时失败了。1.我的设置使用SAML 2.0进行Okta集成,这一点很重要,因为它管理登录,可能意味着仅启动服务可能不够。
1.降级没有解决问题。如果升级是问题的原因,那么使用
sudo apt-get install jenkins=2.176.1
降级应该可以在重新启动服务后解决问题,但它没有。1.手动安装插件失败。
启动Jenkins
在我的例子中,主要的攻击者是上面显示的SAML插件,因为它控制了我以管理员身份登录的能力。由于我使用SAML 2.0将auth与Okta集成,因此我的
config.xml
文件具有以下节点:从文件中删除这一部分(还记得备份吗?)会导致Jenkins停止尝试加载SAML相关的Java类,这允许它在我的示例中 Boot 。但是,由于(现在缺少)Okta集成,在重新启动服务后没有办法登录。
访问管理控件+插件升级
***安全警告:***这 * 在我的情况下 * 有效,因为我位于公司防火墙之后,并且此工具 * 无法 * 从公司外部访问。如果您的Jenkins示例可以通过Internet访问,***请不要这样做,并寻找其他方法!***在解决此问题时,请考虑至少暂时阻止对您的服务器的Internet访问(例如禁用端口转发规则等)。(这假定您与服务器位于同一LAN中,以便不会切断您自己的访问。)
在我的例子中,auth是Okta集成(即用于访问)和Jenkins中基于角色的auts的组合,存储在
config.xml
文件中。如上所示,我已经***临时在
admin
角色下添加了<sid>anonymous</sid>
条目。这将允许您(实际上, 任何人 *,因此出现了上述安全警告)以匿名管理员的身份临时访问您的Jenkins示例。在此之后重新启动Jenkins服务(例如
sudo systemctl restart jenkins.service
)。您现在可以进入 Manage Jenkins〉〉Manage Plugins 部分并强制更新。选中此框可在下载插件后重新启动Jenkins以确保它们安装。清理
此时,您应该恢复原始的
config.xml
(例如sudo mv config.xml.backup config.xml
),然后再次重新启动Jenkins服务。这将撤消在前面部分中指定的更改,您应该返回到原始配置,无论它是什么。wmomyfyw2#
我在Jenkins的网页上遇到了同样的错误,而不是登录页面。我得到这个错误是因为我想一次更新所有插件在我的Jenkins版本2. 73. 3上。
就像你一样,重启系统也无济于事。
所以我看了一下日志,它们看起来很相似:
一个小细节:对我来说插件无法更新,因为Jenkins版本太旧了。这与接受的解决方案中的日志完全相反。
所以我决定先告诉Jenkins
Jenkins回来了,但不是所有插件:尽管服务器已启动并正在运行,但某些监视作业仍有错误。
所以我决定在管理页面重新启动插件更新(为了与jenkins的版本同步),我重新启动了搜索更新,并采取了所有兼容的.在此安装和重新启动后,一切终于恢复正常.
我认为添加此内容以完成可接受的解决方案是很重要的,因为您不必对config.xml执行危险的修改。
cczfrluj3#
此类阻止访问Jenkins Web控制台的错误可能是由Jenkins配置文件中的授权插件错误导致的,原因是手动编辑或中断的插件更新。
作为一个快速而肮脏的解决方案,当更精细的失败(包括备份太旧或不兼容),只有当您确保潜在的黑客将无法访问您的未受保护的Jenkins主,
正在删除Jenkins
config.xml
我将用默认值重新创建它,并给予你(也给所有其他人!)快速匿名访问Jenkins网络界面。请不要把它当作黑客建议。
因此,在恢复对Jenkins控制台的访问后,首先要做的是在以下位置设置适当的访问控制:
https://<JENKINS_URL>/configureSecurity/
个您可能需要恢复的另一个设置是阻止在从属或主节点上启动管道构建的节点/云标签,可以在以下位置执行此操作:
https://<JENKINS_URL>/computer/
nsc4cvqm4#
在我的例子中,它通常是由Jenkins容器中的破坏性更改引起的,例如,Jenkins降级,破坏GitHub授权插件。
根据我的经验,破坏性最小的解决方案是备份Jenkins配置文件(
config.xml
),并从中删除与安全相关的部分(authorizationStrategy
和securityRealm
),然后重新启动Jenkins并快速恢复身份验证和授权。6vl6ewon5#
可能值得检查
/var/lib/jenkins/config.xml
的umask