Как вы поддерживаете работу Jenkins и мастер конфиги?

56

Я хотел бы сделать резервную копию всех заданий Jenkins и файлов конфигурации. Какой самый простой способ сделать это?

kenorb
источник
Что ты пробовал?
030
1
Я попробовал это .
Кенорб

Ответы:

33

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

Вы можете увидеть, где находится ваш дом Дженкинса:

echo $JENKINS_HOME

И, например, если вы хотите создать резервную копию только тех заданий, на которые вы можете перейти:

cd $JENKINS_HOME/jobs

И сделайте резервную копию этой папки.

Вся эта конфигурация будет кучей файлов XML .

Если вы используете официальный образ докера Jenkins , дом будет включен:

/var/jenkins_home
Gepser
источник
2
Мне нужно было переключиться на пользователя jenkins, чтобы получить доступ к $JENKINS_HOMEпеременной окружения:, sudo su -s /bin/bash jenkinsа затем echo $JENKINS_HOME, что для меня было/var/lib/jenkins
Брайс Гуинта
2
Проблема с резервным копированием всей папки «jobs» заключается в том, что копируются также и задания - это может означать много ГБ.
Майк Аргириу
Должен ли сервис Дженкинс перезапуститься?
Синь Мэн
Дженкинс дома в MacOS (установка Homebrew по умолчанию): ~ / .jenkins
chuckSaldana
30

Все задания ( jobs/) и главные конфигурационные файлы ( config.xml) можно найти в домашней папке Jenkins ( JENKINS_HOME) в следующей структуре:

JENKINS_HOME
 +- config.xml     (jenkins root configuration)
 +- *.xml          (other site-wide configuration files)
 +- userContent    (files in this directory will be served under your http://server/userContent/)
 +- fingerprints   (stores fingerprint records)
 +- plugins        (stores plugins)
 +- workspace (working directory for the version control system)
     +- [JOBNAME] (sub directory for each job)
 +- jobs
     +- [JOBNAME]      (sub directory for each job)
         +- config.xml     (job configuration file)
         +- latest         (symbolic link to the last successful build)
         +- builds
             +- [BUILD_ID]     (for each build)
                 +- build.xml      (build result summary)
                 +- log            (log file)
                 +- changelog.xml  (change log)

Большая часть конфигурации представлена ​​в формате XML, поэтому резервное .xmlкопирование всех файлов должно быть достаточным.

Все настройки, журналы сборки, архивы артефактов хранятся в каталоге JENKINS_HOME. Просто заархивируйте этот каталог, чтобы сделать резервную копию. Точно так же восстановление данных - это просто замена содержимого каталога JENKINS_HOME из резервной копии.

Резервные копии могут быть сделаны без остановки сервера, но при восстановлении остановите сервер.


Для согласованного резервного копирования рекомендуется хранить JENKINS_HOMEкаталог в репозитории Git.

Например:

cd $JENKINS_HOME
git init
shopt -s globstar
git add **/config.xml
git commit -m'Added job config files' -a

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

Связанный: есть ли способ сохранить файлы конфигурации Hudson / Jenkins в системе контроля версий?

kenorb
источник
Как часто вы создаете резервную копию? Вы автоматически загружаете код в репозиторий git? Если это правда, вы создаете запрос на извлечение, который необходимо объединить вручную (ручное вмешательство), чтобы выполнить некоторую проверку целостности резервной копии?
030
2
@ 030 Обычно вручную после некоторых серьезных изменений, когда я знаю, что конфигурация стабильна, и мне нужно сделать ее резервную копию, так как Дженкинс часто любит ломать вещи, такие как смена подчиненных с unix на windows самостоятельно, удаление паролей из форм, поэтому Имея их в git / GitHub, я могу легко сравнить и найти недостающие данные и добавить их обратно или вернуть какой-то конкретный файл. Есть несколько плагинов для сохранения истории изменений, но я не нашел это полезным.
Кенорб
Вы храните пароли в git? Вы их шифруете? Используете ли вы конвейеры, также как Pipeline, как код?
030
3
@ 030 Jenkins шифрует пароли / учетные данные по умолчанию, но вы можете легко их расшифровать . Однако без главного ключа (который не должен быть частью резервной копии) или доступа к Jenkins никто другой не сможет. Я не использую Pipeline в качестве кода.
Кенорб
Как вы проверяете целостность этой резервной копии в git? Например, вы раскручиваете виртуальную машину или систему докеров, монтируете git repo и проверяете, все ли еще работает?
030
11

Если ваши задания Jenkins определены в Jenkinsfile, вы можете сохранить их в репозитории git и загрузить их с помощью Pipeline .

К сожалению, поскольку не все плагины Jenkins поддерживают Jenkinsfile и Pipeline, вам нужно будет вручную создавать новые Jenkinsfile, если вы хотите переместить существующие задания в этот формат.

AVI
источник
9

SCM синхронизации конфигурации Plugin делает именно то , что вы хотите. Работает с svn или git для резервного копирования ядра и конфигурации заданий jenkins, что позволяет легко отслеживать, кто внес изменения, а также выполнять резервное копирование.

Адам Берри
источник
1
Я буквально копирую папку $ JENKINS_HOME, но это кажется намного лучше.
MrMesees
2
То, что плагины кажутся довольно неактивными / мертвыми - действительно ли они функциональны и на уровне 2017 года?
Туукка Мустонен,
5

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

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

Оба сценария хорошо описаны в этом блоге . Вы получите лучшую идею и шаги для конфигурации.

Бибин Уилсон
источник
3

Я использую скрипты от sue445/jenkins-backup-script.

Он архивирует настройки Jenkins и плагины, такие как:

  • $JENKINS_HOME/*.xml
  • $JENKINS_HOME/jobs/*/*.xml
  • $JENKINS_HOME/nodes/*
  • $JENKINS_HOME/plugins/*.jpi
  • $JENKINS_HOME/secrets/*
  • $JENKINS_HOME/users/*

использование

./jenkins-backup.sh /path/to/jenkins_home archive.tar.gz

# add timestamp suffix
./jenkins-backup.sh /path/to/jenkins_home backup_`date +"%Y%m%d%H%M%S"`.tar.gz
nickcheng
источник
3

Вы можете попробовать плагин thinBackup (даже если он активно не поддерживается) [если все, что вам нужно, - это сделать логическую резервную копию] (т. Е. Большинство XML-файлов config, заданий, узлов и т. Д.). Размер резервной копии не будет огромным.

Сайкат Сенгупта
источник
1

Мне нужно было перенести Jenkins с одного экземпляра Windows Server на другой. Наконец мне удалось сделать это так:

  • Остановите сервис Дженкинс (если вы можете себе это позволить)
  • Скопируйте всю папку Jenkins (по умолчанию C:\Program Files x86\Jenkins)
  • Вставить на новый экземпляр
  • Зайдите в каталог и запустите jenkins.exe install

Это зарегистрирует недавно вставленный Jenkins как сервис на новой машине и будет работать на 100% так же.

Если это работает, то если вам нужна резервная копия просто для будущей безопасности, скопируйте куда-нибудь папку Jenkins. Это будет работать как снимок.

мандарин
источник