2012-01-27 5 views
29

Я настраиваю новый сервер для запуска Дженкинса. У меня есть существующий сервер Jenkins с рабочими местами. Теперь я хочу скопировать задания из старого экземпляра в новый экземпляр.Как скопировать задание из одного экземпляра в другой?

В новом экземпляре я на экране New Job. Я замечаю, что есть опция «копировать существующее задание». Когда я вставил путь к заданию на старом экземпляре, я продолжаю получать сообщение об ошибке «Нет такой работы в http://old-instance/job/jobName».

Как скопировать задание из одного экземпляра в другой?

+0

И вы уверены, что вы не просто хотите, чтобы настроить новый сервер в качестве подчиненного Дженкинс, таким образом, что рабочие места будут распределены между обоими серверами? –

+0

Нет, старая машина уходит на пенсию. – Isaac

+0

http://stackoverflow.com/questions/8424228/export-import-jobs-in-jenkins/30575318#30575318 – petey

ответ

26

В соответствии с руководством, https://wiki.jenkins-ci.org/display/JENKINS/Administering+Jenkins, это просто переместить соответствующий каталог заданий в новый экземпляр Jenkins.

Опция «Копировать существующее задание» требует, чтобы работа существовала в текущем экземпляре Jenkins. Это вариант использования существующего задания в качестве шаблона. Он не может использоваться для перемещения заданий между экземплярами.

+1

Не совсем то, что я хотел услышать, но спасибо в любом случае. – Isaac

+0

Извините, что;) – Magnus

+3

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

15

Существует очень плагин, чтобы сделать это онлайн без копий файла (который работает): Задание импорта плагин: https://wiki.jenkins-ci.org/display/JENKINS/Job+Import+Plugin

приветы

Didier

+0

Сегодня в версии 1.2 не работает с рекламными акциями , –

+0

Довольно аккуратный. Работает отлично. – FacePalm

+1

Это могло быть круто - но не работает для меня –

2

Работа Импорт Plugin это самый простой способ копировать задания из одного экземпляра jenkins в другое. Если это не работает из-за некоторых проблем безопасности, вы можете просто скопировать весь каталог заданий из старого экземпляра jenkins в новый экземпляр jenkins. Рабочие места присутствуют в {Jenkins_Home} \ jobs .. на сервере.

Как только вы закончите с копией, просто перезагрузите конфигурацию в новом экземпляре. Вы можете перезагрузить его из Jenkins-> Manage Jenkins-> Перезагрузить конфигурацию с диска

После завершения загрузки вы можете видеть свои вакансии. :)

1

Вам просто нужно создать каталог с тем же именем, что и задание, и скопировать файл config.xml из оригинального Jenkins.

Остерегайтесь того, что если вам нужно сохранить нумерацию сборки, вам нужно будет скопировать номер в файле номера сборки и быть осторожным, если у вас есть разные плагины на обоих серверах Jenkins, как @LeeMeador говорит в своих комментариях.

+0

Если вы хотите сохранить последовательности нумерации сборки (возможно, вы записываете их в Jira, например), вам также нужно скопировать номер в файл с номером сборки. Его в той же папке рядом с config.xml. –

+0

Не забывайте, что файл config.xml содержит файлы, относящиеся к плагинам. Если у вас есть разные плагины в новом Jenkins, вам нужно перейти на экран настройки Jenkins для любых скопированных заданий, чтобы проверить настройки и снова сохранить. –

+0

Вы правы в этих двух комментариях @LeeMeador – Roberto

4

Есть зарегистрировано не менее трех способов

  1. каталог Копирование заданий
  2. Использование Импорт Plugin https://wiki.jenkins-ci.org/display/JENKINS/Job+Import+Plugin
  3. Использование Дженкинс CLI в список заданий, получить XML-задания, а затем создать работу на новом сервере на основе xml
0

Я использовал Perl для автоматизации таких процессов с использованием CLI (перейдите в $ jenkins_URL/cli/и загрузите Je nkins-cli.jar) (сценарий изменен на сценарий)

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

my $newJobPrefix = "New_Jenkins"; 
my $jobPrefix = "Old_Jenkins"; 
my $result = `"$java" -jar old-jenkins-cli.jar -noKeyAuth -s $jenkins_URL list-jobs All`; 
@jobList = split("\n", $result); 
foreach my $job (@jobList) 
{ 
    # ---- Getting configuration of jobs ---- 
    print "Getting config for: $job \n"; 
    my $config = `"$java" -jar $jenkinsJar -noKeyAuth -s $jenkins_URL get-job $job`; 

    my $file = "$jobPrefix\\$job.xml"; 
    unless(open FILE, '>', $file) {die "Unable to open $file";} 
    print FILE $config; 
    close FILE; 

    # ---- Adding Job to new Jenkins ---- 
    my $result = `"$java" -jar new-jenkins-cli.jar -noKeyAuth -s $New_jenkins_URL create-job $job< $file`; 
} 

Удачи вам!

+0

Удачи, потому что вы защищаете Perl? Это может сработать, но требует нескольких вещей: A> правильная версия java, B> наличие «old-jenkins-cli.jar» и «new-jenkins-cli.jar», C> использование теперь устаревшей формы команд cli, D> working Perl, E> У старого и нового сервера есть тот же (или очень похожий) плагин и конфигурация, F> Что скопированные задания не полагаются на какой-то другой контент, такой как учетные данные или местной среде. –

+0

Привет, Стивен. Я не сказал «использовать Perl», это то, что я использовал для этой конкретной задачи. Это часть более крупной автоматизации для промежуточной среды, которая гарантирует, что при организации нового сервера будут применяться те же самые версии плагинов, окружения и другие конфигурации. Поскольку вопрос касался этого раздела, я поделился им. Он не должен быть Perl, и он только показывает другой программный метод как возможность этого достичь. Кроме того, ни один из ответов не учитывал несоответствие плагинов или конфигураций среды, поэтому я не понимаю вашу точку зрения. – Dvir669

+0

Я также подписываю большинство своих ответов с удачей. – Dvir669

3

Вы также можете сделать это в командной строке:

  1. Собирает аутентификации API токенов из двух Дженкинс экземпляров для пользователя: http://<jenkins-server>/user/<username>/configure
  2. Curl команды для создания задания на новом экземпляре из конфига старый экземпляр: curl -k -s http://<user>:<token>@OLD_JENKINS/job/JOBNAME/config.xml | curl -k -X POST https://<user>:<token>@http://NEW_JENKINS/createItem?name=JOBNAME --header "Content-Type: application/xml" -d @-

(любезно https://stackoverflow.com/a/30575318/3891027)

0
  1. Копирование задания в существующей папке
  2. Переместить работу в новую папку
Смежные вопросы