Мы используем Jenkins 2.426.3 на серверах Windows и Apache Tomcat 9.0.89, в настоящее время с Java JDK 11. Мы пытались переключиться на JDK 17, но столкнулись с этой ошибкой при запуске Tomcat:
16-Aug-2024 16:46:00.664 INFO [Inspecting plugin F:\Jenkins\plugins\blueocean-git-pipeline.hpi] jenkins.InitReactorRunner$1.onAttained Loaded all jobs
16-Aug-2024 16:46:00.703 INFO [Inspecting plugin F:\Jenkins\plugins\blueocean-github-pipeline.hpi] jenkins.InitReactorRunner$1.onAttained Configuration for all jobs updated
16-Aug-2024 16:46:00.722 INFO [Download metadata thread] hudson.util.Retrier.start Attempt #1 to do the action check updates server
16-Aug-2024 16:46:04.306 INFO [Inspecting plugin F:\Jenkins\plugins\blueocean-github-pipeline.hpi] jenkins.InitReactorRunner$1.onAttained Completed initialization
16-Aug-2024 16:46:04.322 SEVERE [Jenkins initialization thread] hudson.util.BootFailure.publish Failed to initialize Jenkins
hudson.util.HudsonFailedToLoad: java.io.IOException: java.lang.RuntimeException: Failed to serialize jenkins.model.Jenkins#views for class hudson.model.Hudson
at hudson.WebAppMain$3.run(WebAppMain.java:264)
Caused by: java.io.IOException: java.lang.RuntimeException: Failed to serialize jenkins.model.Jenkins#views for class hudson.model.Hudson
at hudson.XmlFile.write(XmlFile.java:223)
at jenkins.model.Jenkins.save(Jenkins.java:3624)
at jenkins.model.Jenkins.<init>(Jenkins.java:1013)
at hudson.model.Hudson.<init>(Hudson.java:86)
at hudson.model.Hudson.<init>(Hudson.java:82)
at hudson.WebAppMain$3.run(WebAppMain.java:247)
Caused by: java.lang.RuntimeException: Failed to serialize jenkins.model.Jenkins#views for class hudson.model.Hudson
at hudson.util.RobustReflectionConverter$2.writeField(RobustReflectionConverter.java:274)
at hudson.util.RobustReflectionConverter$2.visit(RobustReflectionConverter.java:241)
at com.thoughtworks.xstream.converters.reflection.PureJavaReflectionProvider.visitSerializableFields(PureJavaReflectionProvider.java:174)
at hudson.util.RobustReflectionConverter.doMarshal(RobustReflectionConverter.java:226)
at hudson.util.RobustReflectionConverter.marshal(RobustReflectionConverter.java:163)
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:68)
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:59)
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:44)
at com.thoughtworks.xstream.core.TreeMarshaller.start(TreeMarshaller.java:83)
at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.marshal(AbstractTreeMarshallingStrategy.java:37)
at com.thoughtworks.xstream.XStream.marshal(XStream.java:1303)
at com.thoughtworks.xstream.XStream.marshal(XStream.java:1292)
at com.thoughtworks.xstream.XStream.toXML(XStream.java:1265)
at hudson.XmlFile.write(XmlFile.java:216)
... 5 more
Caused by: java.lang.RuntimeException: Failed to serialize hudson.model.ListView#jobNames for class hudson.model.ListView
at hudson.util.RobustReflectionConverter$2.writeField(RobustReflectionConverter.java:274)
at hudson.util.RobustReflectionConverter$2.visit(RobustReflectionConverter.java:241)
at com.thoughtworks.xstream.converters.reflection.PureJavaReflectionProvider.visitSerializableFields(PureJavaReflectionProvider.java:174)
at hudson.util.RobustReflectionConverter.doMarshal(RobustReflectionConverter.java:226)
at hudson.util.RobustReflectionConverter.marshal(RobustReflectionConverter.java:163)
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:68)
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:59)
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:44)
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller$1.convertAnother(AbstractReferenceMarshaller.java:87)
at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.writeBareItem(AbstractCollectionConverter.java:94)
at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.writeItem(AbstractCollectionConverter.java:66)
at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.writeCompleteItem(AbstractCollectionConverter.java:81)
at com.thoughtworks.xstream.converters.collections.CollectionConverter.marshal(CollectionConverter.java:75)
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:68)
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:59)
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller$1.convertAnother(AbstractReferenceMarshaller.java:83)
at hudson.util.RobustReflectionConverter.marshallField(RobustReflectionConverter.java:283)
at hudson.util.RobustReflectionConverter$2.writeField(RobustReflectionConverter.java:270)
... 18 more
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private static final long java.lang.String$CaseInsensitiveComparator.serialVersionUID accessible: module java.base does not "opens java.lang" to unnamed module @24f055ef
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:178)
at java.base/java.lang.reflect.Field.setAccessible(Field.java:172)
at com.thoughtworks.xstream.converters.reflection.FieldDictionary.buildDictionaryEntryForClass(FieldDictionary.java:176)
at com.thoughtworks.xstream.converters.reflection.FieldDictionary.buildMap(FieldDictionary.java:142)
at com.thoughtworks.xstream.converters.reflection.FieldDictionary.fieldsFor(FieldDictionary.java:80)
at com.thoughtworks.xstream.converters.reflection.PureJavaReflectionProvider.visitSerializableFields(PureJavaReflectionProvider.java:167)
at hudson.util.RobustReflectionConverter.doMarshal(RobustReflectionConverter.java:206)
at hudson.util.RobustReflectionConverter.marshal(RobustReflectionConverter.java:163)
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:68)
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:59)
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:44)
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller$1.convertAnother(AbstractReferenceMarshaller.java:87)
at com.thoughtworks.xstream.converters.collections.TreeMapConverter.marshalComparator(TreeMapConverter.java:67)
at com.thoughtworks.xstream.converters.collections.TreeSetConverter.marshal(TreeSetConverter.java:52)
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:68)
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:59)
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller$1.convertAnother(AbstractReferenceMarshaller.java:83)
at hudson.util.RobustReflectionConverter.marshallField(RobustReflectionConverter.java:283)
at hudson.util.RobustReflectionConverter$2.writeField(RobustReflectionConverter.java:270)
... 35 more
16-Aug-2024 16:46:04.330 INFO [Jenkins initialization thread] hudson.lifecycle.Lifecycle.onStatusUpdate Stopping Jenkins
16-Aug-2024 16:46:04.374 INFO [Jenkins initialization thread] jenkins.model.Jenkins$16.onAttained Started termination
16-Aug-2024 16:46:04.385 INFO [Jenkins initialization thread] hudson.plugins.build_timeout.global.Lifecycle.shutdown Shutdown complete - Global TimeOut ScheduledExecutorService had 0 tasks pending
16-Aug-2024 16:46:11.407 WARNING [Jenkins initialization thread] org.jenkinsci.plugins.workflow.cps.CpsFlowExecution$9.onFailure null
org.jenkinsci.remoting.util.ExecutorServiceUtils$FatalRejectedExecutionException: Cannot execute the command java.util.concurrent.FutureTask@49f2a3b3[Not completed, task = java.util.concurrent.Executors$RunnableAdapter@7e92a04[Wrapped task = org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$1@18a3bf79]]. The executor service is shutting down
at hudson.remoting.SingleLaneExecutorService.execute(SingleLaneExecutorService.java:116)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:123)
at jenkins.util.InterceptingExecutorService.submit(InterceptingExecutorService.java:46)
at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution$5.onSuccess(CpsFlowExecution.java:925)
at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution$5.onSuccess(CpsFlowExecution.java:921)
at org.jenkinsci.plugins.workflow.support.concurrent.Futures$1.run(Futures.java:147)
at org.jenkinsci.plugins.workflow.support.concurrent.DirectExecutor.execute(DirectExecutor.java:33)
at com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:1286)
at com.google.common.util.concurrent.AbstractFuture.addListener(AbstractFuture.java:760)
at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.addListener(AbstractFuture.java:134)
at org.jenkinsci.plugins.workflow.support.concurrent.Futures.addCallback(Futures.java:157)
at org.jenkinsci.plugins.workflow.support.concurrent.Futures.addCallback(Futures.java:97)
at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.runInCpsVmThread(CpsFlowExecution.java:921)
at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.suspendAll(CpsFlowExecution.java:1678)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:109)
at hudson.init.TaskMethodFinder$TaskImpl.run(TaskMethodFinder.java:185)
at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:305)
at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:221)
at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:120)
at org.jvnet.hudson.reactor.Reactor$Node.runIfPossible(Reactor.java:142)
at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:131)
at org.jvnet.hudson.reactor.Reactor$Node.runIfPossible(Reactor.java:142)
at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:284)
at jenkins.model.Jenkins._cleanUpRunTerminators(Jenkins.java:3735)
at jenkins.model.Jenkins.cleanUp(Jenkins.java:3658)
at hudson.WebAppMain$3.run(WebAppMain.java:268)
16-Aug-2024 16:46:11.844 INFO [Jenkins initialization thread] jenkins.model.Jenkins$16.onAttained Completed termination
16-Aug-2024 16:46:11.844 INFO [Jenkins initialization thread] jenkins.model.Jenkins._cleanUpDisconnectComputers Starting node disconnection
16-Aug-2024 16:46:12.170 INFO [Jenkins initialization thread] jenkins.model.Jenkins._cleanUpShutdownPluginManager Stopping plugin manager
16-Aug-2024 16:46:12.212 INFO [Jenkins initialization thread] jenkins.model.Jenkins._cleanUpPersistQueue Persisting build queue
16-Aug-2024 16:46:12.227 WARNING [Jenkins initialization thread] hudson.model.listeners.SaveableListener.fireOnChange null
java.lang.NullPointerException: Cannot invoke "hudson.plugins.jobConfigHistory.JobConfigHistory.isSaveable(hudson.model.Saveable, hudson.XmlFile)" because "plugin" is null
at hudson.plugins.jobConfigHistory.JobConfigHistorySaveableListener.onChange(JobConfigHistorySaveableListener.java:55)
at hudson.model.listeners.SaveableListener.fireOnChange(SaveableListener.java:82)
at hudson.model.Queue.save(Queue.java:479)
at jenkins.model.Jenkins._cleanUpPersistQueue(Jenkins.java:3921)
at jenkins.model.Jenkins.cleanUp(Jenkins.java:3676)
at hudson.WebAppMain$3.run(WebAppMain.java:268)
16-Aug-2024 16:46:12.227 INFO [Jenkins initialization thread] jenkins.model.Jenkins._cleanUpAwaitDisconnects Waiting for node disconnection completion
16-Aug-2024 16:46:12.227 SEVERE [Jenkins initialization thread] jenkins.model.Jenkins._cleanUpPluginServletFilters Failed to stop filters
java.lang.NoClassDefFoundError: net/bull/javamelody/MonitoringInitialContextFactory
at net.bull.javamelody.FilterContext.destroy(FilterContext.java:472)
at net.bull.javamelody.MonitoringFilter.destroy(MonitoringFilter.java:176)
at net.bull.javamelody.PluginMonitoringFilter.destroy(PluginMonitoringFilter.java:74)
at hudson.util.PluginServletFilter.cleanUp(PluginServletFilter.java:191)
at jenkins.model.Jenkins._cleanUpPluginServletFilters(Jenkins.java:3985)
at jenkins.model.Jenkins.cleanUp(Jenkins.java:3682)
at hudson.WebAppMain$3.run(WebAppMain.java:268)
Caused by: java.lang.ClassNotFoundException: net.bull.javamelody.MonitoringInitialContextFactory
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:445)
at jenkins.util.URLClassLoader2.findClass(URLClassLoader2.java:35)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:592)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
... 7 more
16-Aug-2024 16:46:12.242 INFO [Jenkins initialization thread] hudson.lifecycle.Lifecycle.onStatusUpdate Jenkins stopped
16-Aug-2024 16:46:12.430 SEVERE [SyncQueueListener] hudson.init.impl.InstallUncaughtExceptionHandler$DefaultUncaughtExceptionHandler.uncaughtException A thread (SyncQueueListener/73) died unexpectedly due to an uncaught exception. This may leave your server corrupted and usually indicates a software bug.
java.lang.IllegalStateException: Jenkins.instance is missing. Read the documentation of Jenkins.getInstanceOrNull to see what you are doing wrong.
at jenkins.model.Jenkins.get(Jenkins.java:819)
at hudson.model.Queue.getInstance(Queue.java:3077)
at org.jenkinsci.plugins.pubsub.listeners.SyncQueueListener.lambda$static$0(SyncQueueListener.java:113)
at java.base/java.lang.Thread.run(Thread.java:842)
Необходимо определиться с местом решения проблемы. При переключении обратно на JDK 11 все работает нормально. Не уверен, вызвано ли это плагином или конфигурацией, несовместимой с JDK 17. Все агенты/узлы используют одну и ту же версию JDK, но при обновлении главного узла у нас не было никакого подключения. Любая помощь приветствуется.
Попробовал обновить Java JDK 11 до JDK 17, ожидая загрузки Дженкинса.
Обратите внимание: я сравнил экземпляры, и на обоих серверах установлены одни и те же версии плагинов, так что это не обязательно проблема, но не исключает ответственности плагина, поскольку работающий сервер используется очень мало, поэтому конфигурации не являются 100% идентичны.
вы можете попробовать: 1. временно отключить плагины blueocean-git-pipeline. Из домашнего каталога jenkins перейдите в каталог плагинов и переименуйте blueocean-git-pipeline.jpi в blueocean-git-pipeline.jpi.disabled и перезапустите jenkins и tomcat 2. Ошибка выше говорит о том, что он не может использовать отражение для доступа к частному полю java. lang.String$CaseInsensivityComparator.serialVersionUID в модуле java.lang. Вы можете попробовать открыть java.lang для отражения, используя: --add-opens java.base/java.lang=ALL-UNNAMED, добавленный в JAVA_OPTS, используемый для запуска jenkins.
3. Если вам подходит №2, это временное решение. Лучше попробовать использовать более позднюю версию и плагины Jenkins.
Я попробовал добавить --add-opens java.base/java.lang=ALL-UNNAMED в JDK_JAVA_OPTIONS и JAVA_OPTS, чтобы быть уверенным, но все равно не получилось с разделом listviews в файле config.xml. Отключение двух плагинов голубого океана тоже не помогло.
Я продолжу удаление раздела Listview, чтобы перейти к JDK 17. Следующим шагом будет обновление Jenkins до последней версии LTS. Вместо того, чтобы сосредотачиваться на обновлении только тех плагинов, которые необходимо обновить для обеспечения безопасности или зависимости, мы будем работать над тем, чтобы у нас были самые последние версии по всем направлениям. Для этого я добавлю дополнительный шаг для подтверждения использования плагина, чтобы посмотреть, сможем ли мы удалить неиспользуемые плагины. Спасибо за помощь!
Ненавижу это признавать, поскольку кажется, что это легко исправить, но я выяснил, в чем причина проблемы. Однако я не знаю, есть ли лучший способ решить то, что я планирую..
Сравнивая файлы config.xml в корневой папке Jenkins на обоих серверах, я заметил, что сервер, который не загружается, имеет следующую конфигурацию для просмотра списка:
<listView> <owner class = "hudson" reference = "../../.."/> <name>OSOFAQ</name> <filterExecutors>false</filterExecutors> <filterQueue>false</filterQueue> <properties class = "hudson.model.View$PropertyList"/> <jobNames> <comparator class = "hudson.util.CaseInsensitiveComparator"/> </jobNames> <jobFilters/> <columns> <hudson.views.StatusColumn/> <hudson.views.WeatherColumn/> <hudson.views.JobColumn/> <hudson.views.LastSuccessColumn/> <hudson.views.LastFailureColumn/> <hudson.views.LastDurationColumn/> <hudson.views.BuildButtonColumn/> </columns> <includeRegex>.*FAQ.*</includeRegex> <recurse>true</recurse> </listView>
Когда я добавил это на другой сервер, если не удалось загрузиться с той же ошибкой. Я удалил его, и он загрузился нормально. Я вернулся на сервер, который не загружался, и удалил этот раздел из config.xml. Он загрузился нормально. Я думаю, что-то в этой конфигурации несовместимо с JDK17, но работает с JDK11. У нас нет жесткой зависимости от этого представления, поэтому мы планируем удалить его в качестве постоянного исправления. Я оставлю это открытым для комментариев на случай, если есть лучший способ решить эту проблему на основе приведенной выше конфигурации.