Сегодня я столкнулся с подобной проблемой при обновлении 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) Решение
Было несколькоцели:
- Получить Jenkins до точки, где он может инициализироваться и оставаться в рабочем состоянии;
- Получить доступ к административным элементам управления для обновления нарушающих работу плагинов;
- Перезапустите службу Jenkins и вернитесь к обычным операциям.
Примечания перед продолжением
Несколько вещей, которые нужно иметь в виду, или попробуйте перед тем, как переместится наследующие разделы:
- По умолчанию Jenkins устанавливается в
/var/lib/jenkins/
, а его файл config.xml
находится в этом каталоге. Создайте резервную копию этого config.xml
файла до продолжения! - Вы должны иметь достаточно хорошее понимание и быть разумно убежденным, что у вас есть подобныйдостаточно проблемы , чтобы оправдать попытку этого.
- Сообщения журнала о невозможности чтения
config.xml
являются поддельными ; действительно , похоже, пытается сказать, что произошел сбой при попытке загрузить Java-класс SAML, который был указан . - MyПрограмма установки использует SAML 2.0 для интеграции Okta, что важно, поскольку она управляет входами в систему и может означать, что простого запуска службы может быть недостаточно.
- Понижение рейтинга не исправилопроблема.Если бы обновление было причиной, то понижение до
sudo apt-get install jenkins=2.176.1
решило бы проблему после перезапуска службы, но это не так. - Ошибка ручной установки плагина.
Загрузка 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. Это отменяет изменения, указанные в предыдущих разделах, и вы должны вернуться к своей первоначальной конфигурации, какой бы она ни была.