Экспорт / импорт рабочих мест в Дженкинс - PullRequest
250 голосов
/ 08 декабря 2011

Можно ли обмениваться вакансиями между двумя разными Дженкинсом?Я ищу способ экспорта / импорта рабочих мест.

Ответы [ 17 ]

168 голосов
/ 31 марта 2012

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

  • create-job: создает новую работу, читая stdin как файл конфигурации XML.
  • get-job: выводит XML-файл определения задания в стандартный вывод

Так что вы можете сделать

java -jar jenkins-cli.jar -s http://server get-job myjob > myjob.xml
java -jar jenkins-cli.jar -s http://server create-job newmyjob < myjob.xml

Он прекрасно работает для меня, и я привык хранить в моей системе контроля версий

148 голосов
/ 09 декабря 2011

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

Они предлагают простое решение для перемещения заданий между серверами

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

133 голосов
/ 01 июня 2015

Однострочник:

$ curl -s http://OLD_JENKINS/job/JOBNAME/config.xml | curl -X POST 'http://NEW_JENKINS/createItem?name=JOBNAME' --header "Content-Type: application/xml" -d @-

С аутентификацией:

$ curl -s http:///<USER>:<API_TOKEN>@OLD_JENKINS/job/JOBNAME/config.xml | curl -X POST 'http:///<USER>:<API_TOKEN>@NEW_JENKINS/createItem?name=JOBNAME' --header "Content-Type: application/xml" -d @-

При использовании Crumb, если CSRF активен ( см. Подробности здесь ):

Получить крошку с:

$ CRUMB_OLD=$(curl -s 'http://<USER>:<API_TOKEN>@OLD_JENKINS/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
$ CRUMB_NEW=$(curl -s 'http://<USER>:<API_TOKEN>@NEW_JENKINS/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')

Применить крошку с -H CRUMB:

$ curl -s -H $CRUMB_OLD http:///<USER>:<API_TOKEN>@OLD_JENKINS/job/JOBNAME/config.xml | curl -X POST -H $CRUMB_NEW 'http:///<USER>:<API_TOKEN>@NEW_JENKINS/createItem?name=JOBNAME' --header "Content-Type: application/xml" -d @-
24 голосов
/ 08 декабря 2011

Есть плагин Плагин импорта заданий , который может быть тем, что вы ищете.Я использовал это.У него действительно есть проблемы с импортом проектов с сервера, который не разрешает анонимный доступ.

Для полноты: если у вас есть доступ к обоим из командной строки, вы можете выполнить процедуру, уже упомянутую Khez для Перемещение, Копирование и переименование Jenkins Jobs .

13 голосов
/ 16 марта 2014

Перейдите на главную страницу вашего сервера Jenkins, нажмите на REST API внизу страницы:

Создать работу

Чтобы создать новую работу, отправьте config.xml на этот URL с параметром запроса name=JOBNAME. Вам необходимо отправить заголовок Content-Type: application/xml. Вы получите 200 код состояния в случае успешного создания или 4xx/5xx код в случае неудачи. config.xml - это формат, который Jenkins использует для хранения проекта в файловой системе, поэтому вы можете увидеть примеры их в домашнем каталоге Jenkins или получить конфигурацию XML существующих заданий из /job/JOBNAME/config.xml.

10 голосов
/ 10 апреля 2014

В моем экземпляре Jenkins (версия 1.548) файл конфигурации находится по адресу:

/var/lib/jenkins/jobs/-the-project-name-/config.xml

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

8 голосов
/ 29 марта 2016

Плагин импорта заданий - это простой способ импортировать задания из другого экземпляра Jenkins. Просто нужно указать URL-адрес исходного экземпляра Jenkins. URL-адрес удаленного Jenkins может принимать любые из следующих типов URL-адресов:

  • http://$JENKINS - получить все задания на удаленном экземпляре

  • http://$JENKINS/job/$JOBNAME - получить одну работу

  • http://$JENKINS/view/$VIEWNAME - получить все вакансии в определенном виде

6 голосов
/ 23 декабря 2014

Благодаря ответу Ларри Кая мне удалось создать скрипт для резервного копирования всех моих заданий Дженкинса. Я создал работу, которая работает каждую неделю. Если кто-то найдет это полезным, вот оно:

#!/bin/bash
#IFS for jobs with spaces.
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for i in $(java -jar /run/jenkins/war/WEB-INF/jenkins-cli.jar -s http://server:8080/ list-jobs); 
do 
  java -jar /run/jenkins/war/WEB-INF/jenkins-cli.jar -s http://server:8080/ get-job ${i} > ${i}.xml;
done
IFS=$SAVEIFS
mkdir deploy
tar cvfj "jenkins-jobs.tar.bz2" ./*.xml
4 голосов
/ 12 февраля 2016

Экспорт Jenkins заданий в каталог

 #! /bin/bash
    SAVEIFS=$IFS
    IFS=$(echo -en "\n\b")
    declare -i j=0
    for i in $(java -jar jenkins-cli.jar -s http://server:8080/jenkins list-jobs  --username **** --password ***);
    do
    let "j++";
    echo $j;
    if [ $j -gt 283 ] // If you have more jobs do it in chunks as it will terminate in the middle of the process. So Resume your job from where it ends.
     then
    java -jar jenkins-cli.jar -s http://lxvbmcbma:8080/jenkins get-job --username **** --password **** ${i} > ${i}.xml;
    echo "done";
    fi
    done

Импорт заданий

for f in *.xml;
do
echo "Processing ${f%.*} file.."; //truncate the .xml extention and load the xml file for job creation
java -jar jenkins-cli.jar -s http://server:8080/jenkins create-job ${f%.*}  < $f
done
1 голос
/ 26 октября 2018

Самый простой способ с прямым доступом к машине - скопировать папку заданий из первого jenkins в другой (вы можете исключить рабочие пространства - папка workspace), потому что вся конфигурация задания хранится в файле xml надиск.

Тогда в новых jenkins достаточно просто reload configuration в глобальных настройках (требуется доступ администратора), если нет, то вам нужно будет перезапустить инструмент Jenkins.

Другим способом может быть использование плагинов, упомянутых выше в этом посте.

edit: - в случае, если вы, возможно, также можете исключить modules папки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...