Jenkins升级后保存全局配置在加载之前的错误解决方案

75次阅读
没有评论

问题描述

在将Jenkins从版本2.204.4升级到2.332.1时,遇到了以下错误:

java.lang.IllegalStateException: An attempt to save the global configuration was made before it was loaded...

他尝试过在config.xml文件中注释掉<securityRealm><authorizationStrategy>块,但这导致了Active Directory设置和基于角色的权限被清除。他尝试过重新设置所有设置,但在Jenkins重新启动后,又遇到了同样的错误。

用户还在Jenkins的错误日志中发现,在启动时会为所有用户抛出以下错误:

SEVERE  hudson.model.User#loadFromUserConfigFile: Failed to load E:\jenkins\users\{user}\config.xmljava.nio.channels.ClosedByInterruptException

用户不太熟悉Jenkins,不清楚这个错误的原因。他在评论中提到,问题与role-strategy插件有关,尝试使用Configuration as Code插件来加载config.xml设置,但未成功。问题的根本在于Jenkins重新启动时,config.xml中仍然存在<authorizationStrategy>块,用户希望能够清除它。

解决方案

请注意以下操作可能需要考虑版本差异及风险,操作前请做好备份。

解决方案1:更新插件

经过详细的调查,发现一些插件,特别是Matrix Authorization Strategy Pluginrole-strategy-plugin,处于死锁状态,它们在更新时互相依赖,但无法在“兼容性”下选中。

  1. 首先停止Jenkins服务器。
  2. 找到Jenkins插件文件夹,删除以下插件文件夹及其.jpi文件:
  3. role-strategy
  4. matrix-auth
  5. 启动Jenkins服务器。
  6. 更新Matrix Authorization Strategy Pluginrole-strategy-plugin插件。

解决方案2:清除<authorizationStrategy>

如果您不想继续使用Matrix Authorization Strategy Pluginrole-strategy-plugin插件,您可以尝试清除<authorizationStrategy>块。

  1. 停止Jenkins服务器。
  2. 找到Jenkins的安装文件夹,打开config.xml文件。
  3. 删除包含在<authorizationStrategy>标签内的部分。
  4. 保存并关闭config.xml文件。
  5. 启动Jenkins服务器。

这将移除<authorizationStrategy>块,允许Jenkins在启动时正常加载配置,从而避免错误。

请注意,这两个解决方案都涉及到对Jenkins的插件或配置文件的更改,建议在进行操作前进行备份,以防意外情况发生。

解决方案3:手动控制容器启动顺序(适用于方案2中的步骤)

如果您对Jenkins和Docker有一定的了解,您可以尝试使用脚本或工具手动控制Jenkins容器的启动顺序。这个解决方案可能会比较复杂,需要确保容器之间的依赖关系正确设置。

请注意,这个解决方案不直接涉及Jenkins插件或配置的更改,而是针对Docker容器的操作。

  1. 创建一个启动Jenkins容器的脚本,例如start_jenkins.sh
  2. 在脚本中,使用Docker命令来先启动Jenkins容器,然后再启动其他依赖的容器(如果有)。
  3. 确保脚本中的容器启动顺序符合您的需求。

这样,您可以手动控制Jenkins容器在其他容器启动之后再启动,从而确保配置正确加载。

请注意,这个解决方案可能需要一些Docker和脚本编写方面的知识,但可以在一些复杂情况下提供更大的灵活性。

解决方案4:寻求专业支持

如果您在尝试上述解决方案时遇到困难,或者不确定如何操作,您可以寻求专业的Jenkins支持,如官方文档、社区论坛或付费的技术支持服务。

总结

解决Jenkins升级后出现的全局配置错误需要一些细致的操作。您可以通过更新插件、清除<authorizationStrategy>块、手动控制容器启动顺序或寻求专业支持来解决这个问题。在执行任何操作之前,请务必备份相关的配置文件和数据,以防止意外情况发生。

正文完