Как переместить Дженкинс с одного компьютера на другой

154

В настоящее время я использую Jenkins на своем ПК для разработки. Я установил его на свой ПК для разработки, потому что у меня были ограниченные знания об этом инструменте; так что я проверил это на своем ПК для разработки. Теперь я чувствую себя комфортно с Дженкинсом как моим долгосрочным «партнером» в процессе сборки и хотел бы «переместить» этот Дженкинс на выделенный сервер.

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

Как я могу экспортировать всю информацию Jenkins с моего текущего компьютера на мой новый сервер?

huahsin68
источник
6
Я только что сделал это. Я следовал инструкциям ответа Седрика Жюльена, но обнаружил, что в Windows мне нужно было выполнить установку восстановления, прежде чем Дженкинс сможет успешно запустить после переезда. После ремонта все нормально.
Smurph269

Ответы:

175

Следуя вики Дженкинс , вы должны:

  • Установите новый экземпляр Jenkins на новый сервер
  • Убедитесь, что старые и новые экземпляры Jenkins остановлены
  • Архивировать все содержимое JENKINS_HOME старого экземпляра Jenkins
  • Распакуйте архив в новый каталог JENKINS_HOME
  • Запустите новый экземпляр Jenkins
  • Не забудьте изменить документацию / ссылки на ваш новый экземпляр Jenkins :)
  • Не забудьте сменить владельца новых файлов Jenkins: chown -R jenkins:jenkins $JENKINS_HOME

JENKINS_HOME по умолчанию , расположенный в ~/.jenkinsна установке Linux, но точно найти , где он расположен, перейдите на Http: // your_jenkins_url / Configure страницы и проверьте значение первого параметра: Home directory; это JENKINS_HOME.

Седрик Жюльен
источник
1
Когда я запустил свой новый jenkins, мои узлы показывают вниз, что правильно. Но когда я нажал на каком-то узле, URL-адреса там указывают на старых jenkins, как показано ниже: Запуск из подчиненной командной строки: javaws old-jenkins-server: 8080 / computer / slaveMachine1 / slave-agent.jnlp Или, если ведомое устройство не имеет головы: java -jar slave.jar -jnlpUrl old-jenkins-server: 8080 / computer / slaveMachine1 / slave-agent.jnlp Теперь, как мне сделать эти URL-адреса для каждого узла, указывающего на new-jenkins-server?
Мерлачандра
13
Получил решение моей проблемы, упомянутой в моем предыдущем комментарии: Перейти к управлению Jenkins> настроить систему. Здесь, в разделе «Расположение Jenkins», под полем «Jenkins URL», измените URL, чтобы он указывал на новый сервер jenkins.
Мерлачандра
3
Обязательно скопируйте и скрытые папки!
Мохи
7
хаха +1 за «не забудьте поменять документацию / ссылки на ваш новый экземпляр Jenkins»
Iain Smith
2
У меня были проблемы с правильными правами доступа к файлам и владельцем, чтобы исправить это, я использовал этот сценарий докера (часть, которая устанавливает права доступа / права доступа): hub.docker.com/r/appcontainers/jenkins/~/dockerfile
marcinj
53

Если ваш каталог JENKINS_HOME слишком велик для копирования , и все, что вам нужно, это настроить одинаковые конфигурации Jobs, Jenkins Plugins и Jenkins (и вам не нужны старые артефакты Job и отчеты), тогда вы можете использовать ThinBackup Plugin :

  1. Установите ThinBackup на исходном и целевом серверах Jenkins.
  2. Настройте каталог резервного копирования на обоих (в разделе Управление Jenkins -> ThinBackup -> Настройки)

  3. На Sourse Jenkins перейдите в ThinBackup -> Резервное копирование сейчас

  4. Скопируйте из каталога резервного копирования источника Jenkins в каталог резервного копирования Jenkins Target
  5. На Target Jenkins перейдите в ThinBackup -> Restore, а затем перезапустите службу Jenkins.
  6. Если некоторые плагины или задания отсутствуют, скопируйте содержимое резервной копии непосредственно в целевой JENKINS_HOME.

  7. Если у вас была аутентификация пользователя в исходном Jenkins, а теперь она заблокирована в целевом Jenkins, то отредактируйте Jenkins config.xml, установите <useSecurity>значение false и перезапустите Jenkins.

Ноам Манос
источник
2
Почему каталог JENKINS_HOME слишком велик для копирования? О каких размерах мы говорим?
Вотания
9
мой jenkins_home составляет 100 Гб или около того, я не хочу копировать его на новый сервер, так как его в основном выбрасывают
user230910
3
Мой Jenkins_home составляет ~ 4 ТБ, поэтому тонкая копия, которая содержит только конфигурацию и ни одну из историй сборки или / usercontent, не является полезной.
VolleyJosh
Awesome, плагины ... действительно сэкономили много времени .. справиться с сотнями гигабайт не легко
Swapnil Kotwal
11

Это помогло мне перейти с Ubuntu 12.04 (Jenkins ver. 1.628) на Ubuntu 16.04 (Jenkins ver. 1.651.2). Сначала я установил Jenkins из репозиториев .

  1. Остановите оба сервера Jenkins
  2. Скопируйте JENKINS_HOME(например, / var / lib / jenkins) со старого сервера на новый. Из консоли на новом сервере:

    rsync -av username@old-server-IP:/var/lib/jenkins/ /var/lib/jenkins/

  3. Запустите свой новый сервер Jenkins

Возможно, вам это не нужно, но мне пришлось

  • Manage Jenkinsи Reload Configuration from Disk.
  • Отключите и снова подключите всех рабов.
  • Проверьте Configure System > Jenkins Location, Jenkins URLправильно ли назначен новый сервер Jenkins.
Кату
источник
У новой Дженкинс была та же версия, что и у старой?
Якуб Чаплицкий
@JakubCzaplicki - Оба Дженкинса были 1.6, но не точно такой же версии. Ответ обновлен. Затем я обновил Ubuntu 16.04 до Jenkins 2.6, заменив файл jenkins.war, и он работал хорошо. stackoverflow.com/questions/11062335/…
Katu
После выполнения вышесказанного и посещения /configureSecurityя получаюjava.lang.AssertionError: InstanceIdentity is missing its singleton
Maxisme
@maxisme, поздно, но этот поток предполагает, что упомянутая вами проблема связана с версией Java. вопросов.jenkins-ci.org/browse/JENKINS-46182
Кату
1

Автоматизация сервера Jenkins:

Шаг 1:

Настройте репозиторий для хранения домашнего хранилища Jenkins (заданий, конфигураций, плагинов и т. Д.) В локальном GitLab или в частном репозитории GitHub и регулярно обновляйте его, отправляя любые новые изменения в задания Jenkins, плагины и т. Д.

Шаг 2:

Настройте группу / роль Puppet для Jenkins, которую можно использовать для раскрутки новых серверов Jenkins. Выполните все основные настройки в рецепте Puppet и убедитесь, что он устанавливает последнюю версию Jenkins и настраивает отдельный каталог / mount для JENKINS_HOME.

Шаг 3:

Раскрутите новую машину, используя конфигурацию Jenkins-puppet выше. Когда все установлено, захватите / клонируйте конфигурацию Jenkins из репозитория Git в домашнюю директорию Jenkins и перезапустите Jenkins.

Шаг 4:

Перейти к URL Дженкинс, выберите Управление JenkinsУправление плагинами и обновите все плагины, которые требуют обновления.

Готово

Вы можете использовать Docker Swarm или Kubernetes для автоматического масштабирования подчиненных узлов.

Иджаз Ахмад Хан
источник
1

Иногда у нас может не быть доступа к машине Jenkins для копирования папки непосредственно в другой экземпляр Jenkins. Поэтому я написал утилиту, управляемую меню, которая использует вызовы Jenkins REST API для установки плагинов и заданий из одного экземпляра Jenkins в другой.

Для миграции плагина:

  1. Запрос GET: {SOURCE_JENKINS_SERVER}/pluginManager/api/json?depth=1вы получите список плагинов, установленных с их версией.
  2. Вы можете отправить запрос POST со следующими параметрами, чтобы установить эти плагины.

    final_url=`{DESTINATION_JENKINS_SERVER}/pluginManager/installNecessaryPlugins`
    
    data=`<jenkins><install plugin="{PLUGIN_NAME}@latest"/></jenkins>` (where, latest will fetch the latest version of the plugin_name)
    
    auth=`(destination_jenkins_username, destination_jenkins_password)`
    
    header=`{crumb_field:crumb_value,"Content-Type":"application/xml”}` (where crumb_field=Jenkins-Crumb and get crumb value using API call {DESTINATION_JENKINS_SERVER}/crumbIssuer/api/json
    

Для миграции работы:

  1. Вы можете получить список заданий, установленных на {SOURCE_JENKINS_URL}, используя вызов REST, {SOURCE_JENKINS_URL}/view/All/api/json
  2. Затем вы можете получить файл config.xml каждого задания из заданий в {SOURCE_JENKINS_URL}, используя URL задания {SOURCE_JENKINS_URL}/job/{JOB_NAME}.
  3. Используйте этот файл config.xml для размещения содержимого файла XML в {DESTINATION_JENKINS_URL}, и это создаст задание в {DESTINATION_JENKINS_URL}.

Я создал утилиту на основе меню в Python, которая просит пользователя запустить плагин или миграцию Jenkins и использует для этого вызовы Jenkins REST API.

Вы можете ссылаться на JenkinsMigration.docx с этого URL

psalvi21
источник
Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится.
вич