После перезапуска Jenkins не запускается из-за com.thoughtworks.xstream.mapper.CannotResolveClassException - PullRequest
2 голосов
/ 18 апреля 2019

Дженкинс версия: Дженкинс вер. 2.32.1 Версия плагина Google Login: 1.3

Я получил эту ошибку после перезапуска jenkins, кто-нибудь может подсказать, как ее решить?

Дело в том:

-Я уже убедился, что в каталоге плагинов у меня включен плагин google-login

-Я ничего не изменил в плагинах, просто перезапустить

- Прошло так много времени с тех пор, как я перезапускаю свои Дженкинс

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

Ответы [ 2 ]

0 голосов
/ 18 июля 2019

Сегодня я столкнулся с подобной проблемой при обновлении Jenkins с 2.176.1 до 2.176.2.Само обновление не было проблемой, хотя; это были плагины .

Резюме

Ваше сообщение содержит только подмножество файла журнала, но в моем случае я нашел некоторые записи, которые указывали на плагины в качестве причиныпроблемы. Важным элементом данных в журнале было:

[...]
Jul 17, 2019 10:13:53 AM jenkins.InitReactorRunner$1 onTaskFailed
SEVERE: Failed Loading plugin SAML Plugin v1.1.2 (saml)
java.io.IOException: SAML Plugin version 1.1.2 failed to load.
 - bouncycastle-api version 2.16.0 is older than required. To fix, install version 2.16.1 or later.
[...]

И любые другие записи, которые похожи по формату и передают схожую информацию.

Основная причина

В моей системе было несколько плагинов с ожидающими обновлениями.При обновлении служб (например, apt upgrade jenkins и т. Д.) Служба обычно перезапускается как часть процесса.Перезапуск - это то, что выявляет проблему, показывая, что некоторые плагины не загружались, потому что теперь им требовались более современные зависимости.

Эти плагины не просто приводят к регистрации ошибок: они бросают исключения .Дженкинс, кажется, не готов справиться с ними, и вылетает.Посещение главной страницы Jenkins покажет большой жирный стек и ничего больше.

Подвох в том, что для правильного обновления плагинов вам нужно, чтобы Jenkins был- работающие, но нарушающие работу плагины не позволяют Дженкинсу в первую очередь перейти в необходимое состояние готовности.

(My) Решение

Было несколькоцели:

  1. Получить Jenkins до точки, где он может инициализироваться и оставаться в рабочем состоянии;
  2. Получить доступ к административным элементам управления для обновления нарушающих работу плагинов;
  3. Перезапустите службу Jenkins и вернитесь к обычным операциям.

Примечания перед продолжением

Несколько вещей, которые нужно иметь в виду, или попробуйте перед тем, как переместится наследующие разделы:

  1. По умолчанию Jenkins устанавливается в /var/lib/jenkins/, а его файл config.xml находится в этом каталоге. Создайте резервную копию этого config.xml файла до продолжения!
  2. Вы должны иметь достаточно хорошее понимание и быть разумно убежденным, что у вас есть подобныйдостаточно проблемы , чтобы оправдать попытку этого.
  3. Сообщения журнала о невозможности чтения config.xml являются поддельными ; действительно , похоже, пытается сказать, что произошел сбой при попытке загрузить Java-класс SAML, который был указан .
  4. MyПрограмма установки использует SAML 2.0 для интеграции Okta, что важно, поскольку она управляет входами в систему и может означать, что простого запуска службы может быть недостаточно.
  5. Понижение рейтинга не исправилопроблема.Если бы обновление было причиной, то понижение до sudo apt-get install jenkins=2.176.1 решило бы проблему после перезапуска службы, но это не так.
  6. Ошибка ручной установки плагина.

Загрузка Jenkins

В моем случае основным нарушителем был плагин SAML, показанный выше, поскольку он контролирует мою возможность войти в систему как администратор.Поскольку я использую SAML 2.0 для интеграции аутентификации с Okta, мой файл config.xml имеет следующий узел:

<securityRealm class="org.jenkinsci.plugins.saml.SamlSecurityRealm" plugin="saml@1.1.2">
    [...]
</securityRealm>

Удаление этого раздела из файла (помните резервную копию?) Заставляет Jenkins перестать пытатьсязагрузить связанный с SAML Java-класс, который позволил ему загрузиться в моем случае.Однако из-за (в настоящее время отсутствует) интеграции Okta, после перезапуска службы невозможно войти в систему.

Доступ к административным элементам управления + обновления плагинов


ПРЕДУПРЕЖДЕНИЕ О БЕЗОПАСНОСТИ: Это работает в моем случае , потому что я нахожусь за корпоративным брандмауэром, и к этому инструменту нельзя получить доступ извне компании.Если ваш экземпляр Jenkins доступен в Интернете, НЕ делайте этого и найдите другой способ! Рассмотрите возможность как минимум временно заблокировать доступ в Интернет к вашему серверу (например, удалите правила переадресации портов).и т. д.) пока вы решаете проблему.(Предполагается, что вы находитесь в той же локальной сети, что и сервер, поэтому вы не отключаете свой собственный доступ.)


В моем случае auth - это комбинация интеграции Okta (т. Е. Для доступа) и аутентификаций на основе ролей в Jenkins, хранящихся в файле config.xml. Если это звучит как вы, у вас должно быть что-то похожее на:

<authorizationStrategy class="com.michelin.cio.hudson.plugins.rolestrategy.RoleBasedAuthorizationStrategy">
    [...]
    <role name="admin" pattern=".*">
    <permissions>
        <permission>hudson.model.View.Delete</permission>
        <permission>hudson.model.Computer.Connect</permission>
        [...]
    </permissions>
    <assignedSIDs>
        <sid>anonymous</sid>
        [...]
    </assignedSIDs>
    </role>
    [...]
</authorizationStrategy>

Как показано выше, я временно добавил запись <sid>anonymous</sid> под ролью admin. Это позволит вам временно получить доступ к вашему экземпляру Jenkins в качестве анонимного администратора .

После этого перезапустите службу Jenkins (например, sudo systemctl restart jenkins.service). Теперь вы можете войти в раздел Управление Jenkins >> Управление плагинами и принудительно установить обновления. Установите флажок, чтобы перезапустить Jenkins после загрузки плагинов и убедиться, что они установлены.

Очистка

На этом этапе вы должны восстановить исходный config.xml (например, sudo mv config.xml.backup config.xml), а затем перезапустить службу Jenkins. Это отменяет изменения, указанные в предыдущих разделах, и вы должны вернуться к своей первоначальной конфигурации, какой бы она ни была.

0 голосов
/ 18 апреля 2019

Может стоить проверить маски /var/lib/jenkins/config.xml

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...