Не прямой ответ на ваш вопрос, а лучшая практика: попробуйте написать конфигурацию своей работы с DSL Jenkins Pipeline и сделать ее частью репозиториев ваших проектов. Таким образом, задания легко переносятся с одного сервера Jenkins на другой. См. Github.com/jenkinsci/pipeline-plugin/blob/master/TUTORIAL.md
Уловка, вероятно, заключалась в необходимости перезагрузить конфигурацию со страницы конфигурации Jenkins.
Обновление 2020.03.10
Пейзаж JenkinsCI сильно изменился ... Я уже давно использую Job DSL . У нас есть работа SEED, которая создает остальные рабочие места.
Это помогает нам как пересоздать, так и переместить сервер Jenkins, когда это необходимо :) Вы также можете создать версию этих файлов для еще большей удобства сопровождения!
Чтобы это работало, java на вашем старом сервере, новом сервере и локальном компьютере должна иметь одинаковую версию. В противном случае возникают странные проблемы с потоком / версией. Ваши порты jnlp тоже должны быть открыты.
МаратК
Полный путь к клиенту CLI: JENKINS_HOME / war / WEB-INF / jenkins-cli.jar, где JENKINS_HOME - это местоположение JENKINS_HOME
Роб Килти
1
Этот метод имеет проблемы с голыми голыми амперсандами в XML, например, когда у вас есть & в Groovy-коде.
Роб Келти
некодированные амперсанды в экспортированном XML могут встречаться в коде Groovy, который поддерживает параметры модуля активного выбора (без выбора); представит решение, если смогу.
Роб Келти
1
@information_interchange точно так же, как предложено в моем ответе ниже.
Нужны токены аутентификации для работы, но стали отличной работой!
Viroide
7
curl -s http: // <ПОЛЬЗОВАТЕЛЬ>: <API_TOEKN> @ OLD_JENKINS / job / JOBNAME / config.xml | curl -X POST 'http: // <ПОЛЬЗОВАТЕЛЬ>: <API_TOEKN> @ NEW_JENKINS / createItem? name = JOBNAME' --header "Тип содержимого: application / xml" -d @ - <br/> Получить ключ API пользователя из : JENKIS_URL / user / <USER> / configure > API-токен> Показать API-токен
Suhas Gaikwad
1
Еще один дополнительный вклад в этом. При размещении на целевом сервере вы, вероятно, получите код ошибки HTTP 403 Проблема доступа / createItem. Причина: в запрос не была включена действительная крошка. Вам нужно сгенерировать токен защиты CSRF для целевого сервера Jenkins. Следуйте советам @Kenorb из этой ветки: stackoverflow.com/questions/38137760/…
Mig82
2
Даже не нужно использовать команды curl, поскольку вы можете просто перейти по http://OLD_JENKINS/job/JOBNAME/config.xmlссылке в вашем браузере, чтобы получить config.xmlфайл.
entpnerd
1
Вам нужно --data-binaryвместо -dв curlкоманде, потому что -dмощь запутались в пробелы в ваших сценариях.
Габор Чарди
24
Есть плагин под названием Job Import Plugin, который может быть тем, что вы ищете. Я использовал это. У него есть проблемы с импортом проектов с сервера, который не разрешает анонимный доступ.
Я не верю, что в настоящее время он перемещает что-либо кроме конфигурации.
Jwernerny
14
Перейдите на первую страницу вашего сервера Jenkins, нажмите REST API внизу страницы:
Создать работу
Чтобы создать новую работу, опубликуйте config.xmlэтот URL с параметром запроса name=JOBNAME. Вам необходимо отправить Content-Type: application/xmlзаголовок. Вы получите 200код состояния, если создание 4xx/5xxпрошло успешно, или код, если это не удалось . config.xmlэто формат, который Jenkins использует для хранения проекта в файловой системе, так что вы можете увидеть их примеры в домашнем каталоге Jenkins или путем получения конфигурации XML существующих заданий из /job/JOBNAME/config.xml.
Принадлежит пользователю jenkins и группе jenkins с 644 разрешениями. Копирование файла сюда и обратно должно работать. Я не пытался изменить его напрямую, но сделал резервную копию конфигурации с этого места на случай, если проект необходимо будет снова настроить.
в C:\Users\{admin-user}\.jenkins\jobs\-the-project-name-\config.xml
Саша Бонд
8
Плагин импорта заданий - это простой способ импортировать задания из другого экземпляра Jenkins. Просто нужно указать URL-адрес исходного экземпляра Jenkins. URL-адрес Remote Jenkins может принимать любые из следующих типов URL-адресов:
http://$JENKINS - получить все работы на удаленном экземпляре
http://$JENKINS/job/$JOBNAME - получить одну работу
http://$JENKINS/view/$VIEWNAME - получить все рабочие места в определенном виде
Благодаря ответу Ларри Кая мне удалось создать скрипт для резервного копирования всех моих заданий в Jenkins. Я создал работу, которая работает каждую неделю. Если кто-то найдет это полезным, вот оно:
#!/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
#! /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
Для тех из нас в мире Windows, которые могут иметь или не иметь Bash, вот мой порт PowerShell для Katu и подход Ларри Кая . Надеюсь, это кому-нибудь поможет.
##### Config vars #####
$serverUri ='http://localhost:8080/'# URI of your Jenkins server
$jenkinsCli ='C:\Program Files (x86)\Jenkins\war\WEB-INF\jenkins-cli.jar'# Path to jenkins-cli.jar on your machine
$destFolder ='C:\Jenkins Backup\' # Output folder (will be created if it doesn't exist)
$destFile ='jenkins-jobs.zip'# Output filename (will be overwritten if it exists)########################
$work =Join-Path([System.IO.Path]::GetTempPath())([System.IO.Path]::GetRandomFileName())New-Item-ItemTypeDirectory-Force-Path $work |Out-Null# Suppress output noise
echo "Created a temp working folder: $work"
$jobs =(java -jar $jenkinsCli -s $serverUri list-jobs)
echo "Found $($jobs.Length) existing jobs: [$jobs]"
foreach ($j in $jobs){
$outfile =Join-Path $work "$j.xml"
java -jar $jenkinsCli -s $serverUri get-job $j |Out-File $outfile
}
echo "Saved $($jobs.Length) jobs to temp XML files"New-Item-ItemTypeDirectory-Force-Path $destFolder |Out-Null# Suppress output noise
echo "Found (or created) $destFolder folder"
$destPath =Join-Path $destFolder $destFile
Get-ChildItem $work -Filter*.xml |Write-Zip-Level9-OutputPath $destPath -FlattenPaths|Out-Null# Suppress output noise
echo "Copied $($jobs.Length) jobs to $destPath"Remove-Item $work -Recurse-Force
echo "Removed temp working folder"
Это может работать для некоторых, но не для меня. Это работает, только если новый экземпляр Jenkins имеет прямой доступ к старому экземпляру Jenkins. Мои были в двух разных сетях.
Джастин Домниц
1
Простой скрипт PHP работал для меня.
Экспорт:
// add all job codes in the array
$jobs = array("job1", "job2", "job3");
foreach ($jobs as $value)
{
fwrite(STDOUT, $value. " \n") or die("Unable to open file!");
$path = "http://server1:8080/jenkins/job/".$value."/config.xml";
$myfile = fopen($value.".xml", "w");
fwrite($myfile, file_get_contents($path));
fclose($myfile);
}
Импортировать:
<?php
// add all job codes in the array
$jobs = array("job1", "job2", "job3");
foreach ($arr as $value)
{
fwrite(STDOUT, $value. " \n") or die("Unable to open file!");
$cmd = "java -jar jenkins-cli.jar -s http://server2:8080/jenkins/ create-job ".$value." < ".$value.".xml";
echo exec($cmd);
}
Самый простой способ с прямым доступом к машине - это скопировать папку заданий из первого jenkins в другой (вы можете исключить рабочие пространства - workspaceпапки), потому что вся конфигурация задания хранится в файле xml на диске.
Тогда в новых jenkins просто reload configurationв глобальных настройках (требуется административный доступ) должно хватить, если нет, то вам нужно будет перезапустить инструмент Jenkins.
Другим способом может быть использование плагинов, упомянутых выше в этом посте.
изменить: - в случае, если вы можете также исключить modulesпапки
Ответы:
У Дженкинса есть довольно хорошая вики, хотя ее трудно прочитать, когда вы новичок в программировании CI ...
Они предлагают простое решение для перемещения рабочих мест между серверами
Уловка, вероятно, заключалась в необходимости перезагрузить конфигурацию со страницы конфигурации Jenkins.
Обновление 2020.03.10
Пейзаж JenkinsCI сильно изменился ... Я уже давно использую Job DSL . У нас есть работа SEED, которая создает остальные рабочие места.
Это помогает нам как пересоздать, так и переместить сервер Jenkins, когда это необходимо :) Вы также можете создать версию этих файлов для еще большей удобства сопровождения!
источник
Возможно, использование командной строки jenkins - это еще один вариант, см. Https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI.
Так что вы можете сделать
Он отлично работает для меня, и я привык хранить внутри моей системы контроля версий
источник
Однострочник:
С аутентификацией:
С Crumb, если CSRF активен ( подробности см. Здесь ):
Получить крошку с:
Примените крошку с
-H CRUMB
:источник
http://OLD_JENKINS/job/JOBNAME/config.xml
ссылке в вашем браузере, чтобы получитьconfig.xml
файл.--data-binary
вместо-d
вcurl
команде, потому что-d
мощь запутались в пробелы в ваших сценариях.Есть плагин под названием Job Import Plugin, который может быть тем, что вы ищете. Я использовал это. У него есть проблемы с импортом проектов с сервера, который не разрешает анонимный доступ.
Для полноты: если у вас есть доступ к обоим из командной строки, вы можете выполнить процедуру, уже упомянутую Khez для перемещения, копирования и переименования заданий Jenkins .
источник
Перейдите на первую страницу вашего сервера Jenkins, нажмите REST API внизу страницы:
Чтобы создать новую работу, опубликуйте
config.xml
этот URL с параметром запросаname=JOBNAME
. Вам необходимо отправитьContent-Type: application/xml
заголовок. Вы получите200
код состояния, если создание4xx/5xx
прошло успешно, или код, если это не удалось .config.xml
это формат, который Jenkins использует для хранения проекта в файловой системе, так что вы можете увидеть их примеры в домашнем каталоге Jenkins или путем получения конфигурации XML существующих заданий из/job/JOBNAME/config.xml
.источник
В моем экземпляре Jenkins (версия 1.548) файл конфигурации находится по адресу:
/var/lib/jenkins/jobs/-the-project-name-/config.xml
Принадлежит пользователю jenkins и группе jenkins с 644 разрешениями. Копирование файла сюда и обратно должно работать. Я не пытался изменить его напрямую, но сделал резервную копию конфигурации с этого места на случай, если проект необходимо будет снова настроить.
источник
C:\Users\{admin-user}\.jenkins\jobs\-the-project-name-\config.xml
Плагин импорта заданий - это простой способ импортировать задания из другого экземпляра Jenkins. Просто нужно указать URL-адрес исходного экземпляра Jenkins. URL-адрес Remote Jenkins может принимать любые из следующих типов URL-адресов:
http://$JENKINS
- получить все работы на удаленном экземпляреhttp://$JENKINS/job/$JOBNAME
- получить одну работуhttp://$JENKINS/view/$VIEWNAME
- получить все рабочие места в определенном видеисточник
Благодаря ответу Ларри Кая мне удалось создать скрипт для резервного копирования всех моих заданий в Jenkins. Я создал работу, которая работает каждую неделю. Если кто-то найдет это полезным, вот оно:
источник
В веб-браузере посетите:
Просто сохраните файл на свой диск.
источник
Jenkins экспортирует вакансии в каталог
Импорт рабочих мест
источник
Для тех из нас в мире Windows, которые могут иметь или не иметь Bash, вот мой порт PowerShell для Katu и подход Ларри Кая . Надеюсь, это кому-нибудь поможет.
источник
Это очень легко просто скачать название плагина
Плагин импорта вакансий
Введите URL-адрес вашего удаленного сервера Jenkins, и он автоматически импортирует задания
источник
Простой скрипт PHP работал для меня.
Экспорт:
Импортировать:
источник
Это не работает для существующих рабочих мест, однако есть Дженкинс .
Это позволяет сохранять определения заданий в файлах yaml и в git-репо, который очень переносим.
источник
Самый простой способ с прямым доступом к машине - это скопировать папку заданий из первого jenkins в другой (вы можете исключить рабочие пространства -
workspace
папки), потому что вся конфигурация задания хранится в файле xml на диске.Тогда в новых jenkins просто
reload configuration
в глобальных настройках (требуется административный доступ) должно хватить, если нет, то вам нужно будет перезапустить инструмент Jenkins.Другим способом может быть использование плагинов, упомянутых выше в этом посте.
изменить: - в случае, если вы можете также исключить
modules
папкиисточник
Импортирование заданий вручную: альтернативный способ
Загрузка заданий в Git (управление версиями) В основном выгрузите файл config.xml задания.
Если серверы Linux:
Перезагрузите Дженкинс
источник
Как веб-пользователь, вы можете экспортировать, перейдя в историю конфигурации задания, а затем экспортировав XML.
Я нахожусь в ситуации отсутствия доступа к машине, на которой работает Дженкинс, и хотел экспортировать ее в качестве резервной копии.
Что касается импорта XML как веб-пользователя, я все еще хотел бы знать.
источник