Обновление Jenkins И Заказ Плагинов

  • Автор темы Kss16937
  • Обновлено
  • 20, Oct 2024
  • #1

У меня есть Дженкинс

2.89
installed with many outdated plugins as well. What is the best path for upgrading both the plugins and Jenkins itself? Should one proceed the other?

Я склоняюсь к тому, чтобы сначала обновлять плагины, причем периодически, чтобы ограничить риск. Система полностью резервируется на случай, если что-то пойдет не так. Хотя мне бы хотелось этого избежать, если это вообще возможно.

Обновление: мне удалось обновиться до версии 2.138, ничего не сломав.

#jenkins #jenkins-plugins #upgrade

Kss16937


Рег
02 Dec, 2019

Тем
67

Постов
193

Баллов
568
  • 25, Oct 2024
  • #2

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

У нас более 90 заданий, поэтому протестировать их все нереально — мы постарались определить 8-10 заданий, которые охватывают 90% наших сценариев использования, и запустить их на стендап-дженкинсе, чтобы убедиться, что все в порядке.

Я бы очень советовал сделать что-то подобное, если вы используете jenkins в производственных сценариях. Никогда не знаешь, что может сломаться - у нас было одно обновление, когда из-за ошибки возникло более 150 экземпляров aws ec2 за ~ 10 минут вместо 3 действительно необходимых jenkins... в другой раз все наши модульные и e2e-тесты нашей базы кода сломались, потому что это оказалось не так. Один из плагинов синтаксического анализатора вывода был обновлен и стал несовместим с нашим выходным форматом. У нас даже сломалась интеграция с Bitbucket, и мы перестали запускать задания при каждом нажатии.

Иногда обновление всех плагинов одновременно может вызвать путаницу — у нас был один сценарий, когда что-то сломалось, и найти причину было сложно, поскольку она могла быть связана с одним из двух разных плагинов. В итоге мы подключили два дополнительных дженкинса и обновили каждый плагин, чтобы определить причину. В целом, обновление всего сразу довольно быстро покажет свои недостатки после небольшого тестирования.

Независимо от того, что вы решите, сначала сделайте резервную копию!

 

Vosetrov


Рег
16 Apr, 2020

Тем
80

Постов
218

Баллов
628
  • 25, Oct 2024
  • #3

Не отнять у @vaporwave_sailor или @Alex ответы, а добавить..

Основной ответ вы ДОЛЖНЫ обновить все совместимые плагины, которые только можете, затем войну, затем более новые плагины. Все плагины зависят от минимальной версии Jenkins и Центр обновлений вернет вам другую информацию.

Дальнейшее уточнение, особенно при переходе с <2.263.4 на> 2.277.1 и многие другие. критические изменения пользовательского интерфейса и таблицы-дивы-регарессия (Панель управления): Перед запуском вы должны убедиться, что ваши плагины имеют последнюю версию, совместимую с существующей базовой версией Jenkins. Итак, это плагины, война, плагины.

Если вы не обновляетесь часто, используйте LTS-версия. ПРОЧИТАЙТЕ Руководство по обновлению. ПРОЧИТАЙТЕ Журнал изменений. ПЕРЕЧИТАЙТЕ Руководство по обновлению. Сделайте то же самое для всех своих основные плагины. Есть существенные изменения, особенно в отношении безопасности, которая может потребовать внесения изменений с вашей стороны. Многие ранее включенные в комплект поставки больше не входят в комплект. Плагины, которые давно не поддерживаются, могут иметь лучшие альтернативы или содержать проблемы безопасности, о которых вам следует знать. Поведение и настройки могут измениться.


Ниже приведены НЕ точные шаги, а скорее действия, которые необходимо выполнить в процессе. Описательный, а не предписывающий.

Рассмотрите возможность установки Jenkins Плагин «Конфигурация как код» (JCasC)n сначала к существующей установке. Обычно это позволяет вам экспортировать почти всю конфигурацию и просто перезагрузить ее в новый экземпляр. Гораздо проще, но не справляется с плагинами. А пока скопируйте решение из докер/install_plugins.sh для местного применения; видеть Предварительная установка плагинов.

Сделайте резервную копию существующего Jenkins и установите папку «Dev». Подтвердите свое обновление там, прежде чем подавать заявку на Prod. ВСЕГДА. (Кроме того, в любом случае регулярно делайте резервную копию вашего Prod).

Разделите резервную копию на две части: конфигурацию системы и задания. Вакансии находятся в ${JENKINS_HOME}/jobs. Конфигурация системы включает в себя (в

jenkins.install.runSetupWizard
),
jenkins.model.Jenkins.workspacesDir
, возможно, и другие.

Вернёмся на минутку к плагинам. Я согласен с добавлением их в сегментах:

  • Плагины аутентификации
  • Плагины представления (например: Active-directory, учетные данные)
  • Плагины SCM (например: Git)
  • Административные плагины (например: greenballs, windows-slave)
  • Плагины инструментов (например: ant, maven-plugin)
  • Плагины конвейера (например: агрегатор рабочих процессов, Blue-Ocean, K8s)

Все вышеперечисленное является «Глобальными плагинами с конфигурациями».

  • Наконец, плагины этапов задания; это зависит от конкретной работы.

При использовании подхода install_plugins.sh вам нужно беспокоиться только о плагине самого высокого уровня, поскольку он будет извлекать зависимости. Если вы установите blueocean, он установит около 25 плагинов. Просто укажите первое и получите остальное. Имейте в виду, что файл install_plugins.sh является динамическим, поскольку он получает доступные в данный момент зависимости. Итак, мы выбираем верхний список, управляем им, запускаем один раз, чтобы получить полный список, затем читаем проверенный явный список в экземпляр Prod (управляем коротким, используем полный, сохраняем оба). Мы управляем 55 плагинами верхнего уровня, но установлено 160, включая все зависимости в полном списке.

Этот отличный скрипт предоставит вам существующие плагины:

jenkins.model.Jenkins.buildsDir

В экземпляре Dev установите войну, установите плагины, создайте файл

QuietDown()
, add the line:
QuietDown()
. Это позволяет вашей системе запускаться, не допуская каких-либо работа начинается. Таким образом, вы сможете просматривать системные журналы без паники и замешательства. Посмотрите на все раньше
./nodes
.

Теперь вы можете установить конфигурации системы, но не

./jobs
and not the
INFO: Jenkins is fully up and running
. Запустите его и проверьте журналы для получения информации, предупреждений и ошибок.

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

Если вы используете JCasC, вы можете выполнить тонкую установку конфигураций, а затем импортировать конфигурации JCasC. Использование JCasC здесь.

*Примечание: вы заметите одно важное изменение: больше плагинов переходят на собственную конфигурацию XML вместо добавления в основной файл config.xml. Есть много плагинов, в которых говорится, что эта конфигурация НЕ имеет обратной совместимости. Вам придется восстановить старую конфигурацию при «понижении версии» (правильный язык — начните снова с шага 1)

Только когда ваша основная система запустится нормально, я бы добавил задания (с

Hudson.instance.doQuietDown();
in place ), no nodes and in QuiteDown. Start up again, examine logs for errors, upgrade warnings, etc. Deal w/those. Many plugins will change their data format, hence the many warnings you see, and the «Управление старыми данными». ЕСЛИ вы действительно параноик, вы можете даже написать небольшой классный скрипт, который найдет все ваши задания и пересохранит их. Хотя Jenkins знает об изменениях конфигурации, он фактически не меняет и не обновляет ссылки на плагины в заданиях до тех пор, пока задание не будет запущено или сохранено (если вам нужен сценарий, задайте отдельный вопрос).

Завершите работу, удалите каталог заданий (это ваш экземпляр DEV, так что все в порядке).

Запустите снова и создайте небольшой набор заданий проверки. Они подтверждают все этапы вашей реальной работы, но не влияют на них. Это «тестовые примеры», на которые ссылается @Alex. Мы используем «образцы приложений» различных имеющихся у нас вариантов и заданий, охватывающих все этапы. У нас есть тестовые задания, которые просто попадают на узел, выгружают среду, задания, которые клонируют репозиторий и выполняют сборку (в вариантах), задания, которые выполняют весь цикл: клонирование, сборку, анализ, тестирование, развертывание, а также задания конвейера ( поэтапно). Теперь вы можете добавить конфигурацию и запуск узлов и выполнить их. Они ваше подтверждение. Если они сработают, значит, вы готовы настолько, насколько это возможно. Теперь вы также можете экспортировать конфигурацию JCasC.

Теперь удалите весь экземпляр Dev и ПОВТОРИТЬ используя только окончательную конфигурацию и описанные вами действия. Все ли сработало так, как ожидалось? Запустите JCasC еще раз, они совпали?

Теперь вы можете применить ту же окончательную конфигурацию к своему продукту. Остановите производство и сделайте еще одну резервную копию. Я бы добавил

${JENKINS_HOME}/init.groovy
first to Prod.

Наконец, рассмотрите возможность использования некоторых новых «Свойства системы». Теперь вы можете устанавливать местоположения за пределами ${JENKINS_HOME} для

Jenkins.instance.pluginManager.plugins.sort(false) { a, b -> a.getShortName().toLowerCase() <=> b.getShortName().toLowerCase()}.each { plugin ->

println "${plugin.getShortName()}:${plugin.getVersion()} | ${plugin.getDisplayName()} "
}

// the following may also be useful

// println "+++ ${plugin.getDependants()}"

// println "... ${plugin.getDependencies()"
(ps: sym-links in builds are now optional) and
./*.xml ./secret.key* ./secrets ./security-tokens ./nodes
, удаляя ненужные данные из ${JENKINS_HOME}. Ваши резервные копии станут меньше и проще, а производительность вашей системы может улучшиться! Вы также захотите установить
${JENKINS_HOME}
to false.

Помните, это носит описательный, а не консервирующий характер. Адаптируйтесь к своим потребностям и терпимости к риску.

 

Кремний


Рег
23 Mar, 2011

Тем
84

Постов
202

Баллов
662
  • 25, Oct 2024
  • #4

Я много раз получал некоторый опыт от Дженкинса, вот порядок, которого я продолжал придерживаться, и это сэкономило мне много времени:

  1. Обновите сам Jenkins (при необходимости)
  2. Обновите плагины аутентификации (например, аутентификацию Github org)
  3. Обновите плагины, связанные с наиболее важными конвейерами/проектами (ssh-агенты, ansible, k8s, docker, все, что вы, ребята, используете)
  4. Обновите используемые в настоящее время, но не критически важные плагины (blue-ocean и т. д.).
  5. Обновите остальные плагины

У меня был конвейер «после обновления», который начинал сборку нескольких наиболее важных проектов, и он запускался после каждого шага.

Что мне также очень помогло, так это создание снимков между обновлениями, чтобы я мог легко выполнить откат и не начинать с самого начала, что может занять много времени. Очевидно, я не рекомендую выполнять обновления на месте, я всегда копирую 1:1 и работаю над копией, а затем просто меняю запись DNS.

 

Manolla


Рег
01 May, 2007

Тем
77

Постов
190

Баллов
635
Похожие темы Дата
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно