Чи можливий обмін роботою між двома різними Дженкінсами? Я шукаю спосіб експорту / імпорту робочих місць.
Чи можливий обмін роботою між двома різними Дженкінсами? Я шукаю спосіб експорту / імпорту робочих місць.
Відповіді:
У Дженкінса є досить хороший вікі, хоч і важко читати, коли ви новачок у програмі CI ...
Вони пропонують просте рішення для переміщення завдань між серверами
Трюком, ймовірно, була необхідність перезавантажити конфігурацію зі сторінки конфігурації Дженкінса.
Оновлення 2020.03.10
Ландшафт JenkinsCI сильно змінився ... Я вже деякий час використовую Job DSL . У нас є робота SEED, яка створює решту робочих місць.
Це допомагає нам як відтворити, так і перейти на сервер Дженкінса, коли це потрібно :) Ви також можете версії цих файлів для ще більшої ремонтопридатності!
Можливо, використання командного рядка jenkins - це ще один варіант, див. Https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI
Так ви можете зробити
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
Це добре працює для мене, і я звик зберігати всередині моєї системи управління версіями
Одноколісний:
$ 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 @-
http://OLD_JENKINS/job/JOBNAME/config.xml
посиланням у своєму браузері, щоб забрати config.xml
файл.
--data-binary
замість -d
в curl
команді, тому що -d
міць заплуталися в прогалини в ваших сценаріях.
Є плагін під назвою Job Import Plugin, який може бути тим, що ви шукаєте. Я ним користувався. У нього є проблеми з імпортом проектів із сервера, який не дозволяє анонімний доступ.
Для повноти: Якщо у вас є доступ до обох командних рядків, ви можете виконати процедуру, яку вже згадував Khez для переміщення, копіювання та перейменування Джобкінса Джобса .
Перейдіть на головну сторінку вашого сервера Jenkins, натисніть REST API внизу сторінки:
Створіть роботу
Щоб створити нове завдання, опублікуйте config.xml
цю URL-адресу з параметром запиту name=JOBNAME
. Вам потрібно надіслати Content-Type: application/xml
заголовок. Ви отримаєте 200
код статусу, якщо створення було успішним, або 4xx/5xx
код, якщо він не вдався . config.xml
- це формат, який Дженкінс використовує для зберігання проекту у файловій системі, тому ви можете бачити приклади їх у домашній директорії Дженкінса або витягуючи конфігурацію 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
Плагін Job Import - це простий спосіб імпортувати роботу з іншого екземпляра Jenkins. Просто потрібно вказати URL-адресу джерела Дженкінса. URL-адреса віддаленого Дженкінса може приймати будь-який із наведених нижче типів URL-адрес:
http://$JENKINS
- отримати всі завдання на віддалений екземпляр
http://$JENKINS/job/$JOBNAME
- влаштуйтеся на єдину роботу
http://$JENKINS/view/$VIEWNAME
- отримати всі робочі місця в певному режимі
Завдяки відповіді Ларрі Кая мені вдалося створити сценарій для резервного копіювання всіх моїх робіт у Дженкінсі. Я створив роботу, яка працює на цьому щотижня. Якщо хтось вважає це корисним, ось це:
#!/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
Під час відвідування веб-браузера:
http://[jenkinshost]/job/[jobname]/config.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 Кату та підхід Ларрі Кая . Сподіваюся, це комусь допоможе.
##### 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 -ItemType Directory -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 -ItemType Directory -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 -Level 9 -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"
Завантажити ім'я плагіна дуже просто
Введіть URL-адресу вашого віддаленого сервера Дженкінса, і він буде імпортувати завдання автоматично
Простий скрипт для 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);
}
Це не працює для існуючих робочих місць, проте є конструктор робіт Дженкінса .
Це дозволяє зберігати визначення завдання у файлах yaml та в git repo, який дуже портативний.
Найпростіший спосіб при прямому доступі до машини - скопіювати папку завдань з перших джинкінів в іншу (можна виключити робочі місця - workspace
папку), оскільки вся конфігурація завдання зберігається у файлі xml на диску.
Тоді в нових джинкінах просто reload configuration
в глобальних налаштуваннях (потрібен доступ адміністратора) має бути достатньо, якщо ні, то вам потрібно буде перезапустити інструмент Дженкінса.
Іншим способом може бути використання плагінів, згаданих вище у цій публікації.
редагувати: - якщо ви, ймовірно, також можете виключити modules
папки
Імпорт робочих записів вручну: альтернативним способом
Завантажте роботу на Git (контроль версій) В основному завантажте config.xml Робота.
Якщо сервери Linux:
cd /var/lib/jenkins/jobs/<Job name>
Download the config.xml from Git
Перезапустіть Дженкінса
Як веб-користувач, ви можете експортувати, перейшовши в «Історію конфігурації завдань», а потім експортуючи XML.
Я в ситуації, коли я не маю доступу до машини, на якій працює Дженкінс, і хотів експортувати її як резервну копію.
Щодо імпорту xml як веб-користувача, я все одно хотів би знати.