Nie bezpośrednia odpowiedź na twoje pytanie, ale najlepsza praktyka: spróbuj napisać konfigurację swojej pracy za pomocą Jenkins Pipeline DSL i włączyć ją do repozytoriów twoich projektów. W ten sposób zadania można łatwo przenosić z jednego serwera Jenkins na drugi. Zobacz github.com/jenkinsci/pipeline-plugin/blob/master/TUTORIAL.md
Sztuczka prawdopodobnie polegała na konieczności ponownego załadowania konfiguracji ze strony konfiguracji Jenkins.
Aktualizacja 2020.03.10
Krajobraz JenkinsCI bardzo się zmienił ... Od jakiegoś czasu korzystam z Job DSL . Mamy SEED Job, który generuje resztę zadań.
Pomaga nam to odtworzyć lub przenieść na serwer Jenkins, gdy zajdzie taka potrzeba :) Możesz również zaktualizować te pliki, aby uzyskać jeszcze większą łatwość konserwacji!
Aby to zadziałało, Java na starym serwerze, nowym serwerze i komputerze lokalnym musi mieć tę samą wersję. W przeciwnym razie pojawiają się dziwne problemy ze strumieniem / wersją. Twoje porty jnlp również muszą być otwarte.
MaratC
Pełna ścieżka do klienta CLI to JENKINS_HOME / war / WEB-INF / jenkins-cli.jar, gdzie JENKINS_HOME to lokalizacja JENKINS_HOME
Rob Kielty
1
Ta metoda ma problemy z nagimi ampersandami w pliku XML, na przykład gdy masz kod & Groovy.
Rob Kielty
niekodowane znaki handlowe w eksportowanym pliku XML mogą występować w kodzie Groovy, który wspiera parametry wtyczki Active Choice Plugin (bez możliwości wyboru); przedstawię rozwiązanie, jeśli mogę.
Rob Kielty
1
@information_interchange dokładnie jak zaproponowano w mojej odpowiedzi poniżej.
Potrzebujesz tokenów uwierzytelniających do pracy, ale stal świetna robota!
Viroide,
7
curl -s http: // <USER>: <API_TOEKN> @ OLD_JENKINS / job / JOBNAME / config.xml | curl -X POST 'http: // <USER>: <API_TOEKN> @ NEW_JENKINS / createItem? name = JOBNAME' - nagłówek "Content-Type: application / xml" -d @ - <br/> Pobierz klucz API użytkownika z : JENKIS_URL / user / <USER> / configure > Token API> Pokaż token API
Suhas Gaikwad 16.08.16
1
Tylko jeden dodatkowy wkład w to. Podczas wysyłania do serwera docelowego prawdopodobnie pojawi się kod błędu HTTP 403 Problem z dostępem / createItem. Powód: Żądanie nie zawierało ważnego okruchu. Musisz wygenerować token ochrony CSRF dla docelowego serwera Jenkins. Postępuj zgodnie z radą @Kenorb z tego wątku: stackoverflow.com/questions/38137760/...
Mig82
2
Nie musisz nawet używać poleceń curl, ponieważ możesz po prostu przejść do http://OLD_JENKINS/job/JOBNAME/config.xmlłącza w przeglądarce, aby pobrać config.xmlplik.
entpnerd
1
Musisz --data-binaryzamiast -dw curlpoleceniu, ponieważ -dmoże zepsuć białe znaki w twoich skryptach.
Gabor Csardi
24
Istnieje wtyczka o nazwie Job Import Plugin, która może być tym, czego szukasz. Użyłem tego. Ma problemy z importowaniem projektów z serwera, który nie pozwala na anonimowy dostęp.
Nie sądzę, że obecnie przenosi coś innego niż konfiguracja.
jwernerny,
14
Przejdź do strony głównej serwera Jenkins, kliknij interfejs API REST u dołu strony:
Utwórz pracę
Aby utworzyć nowe zadanie, opublikuj config.xmlpod tym adresem URL z parametrem zapytania name=JOBNAME. Musisz wysłać Content-Type: application/xmlnagłówek. Otrzymasz 200kod stanu, jeśli tworzenie się powiedzie, lub 4xx/5xxkod, jeśli się nie powiedzie. config.xmljest formatem używanym przez Jenkinsa do przechowywania projektu w systemie plików, dzięki czemu można zobaczyć ich przykłady w katalogu domowym Jenkins lub pobierając konfigurację XML istniejących zadań /job/JOBNAME/config.xml.
Należy do użytkownika jenkins i grupy jenkins z uprawnieniami 644. Kopiowanie pliku do i stąd powinno działać. Nie próbowałem zmieniać go bezpośrednio, ale utworzyłem kopię zapasową konfiguracji z tego miejsca na wypadek, gdyby projekt musiał zostać ponownie skonfigurowany.
w systemie WindowsC:\Users\{admin-user}\.jenkins\jobs\-the-project-name-\config.xml
Sasha Bond
8
Wtyczka Job Import to prosty sposób na importowanie zadań z innej instancji Jenkins. Wystarczy podać adres URL źródłowej instancji Jenkinsa. Zdalny adres URL Jenkins może przyjmować dowolny z następujących typów adresów URL:
http://$JENKINS - pobierz wszystkie zadania na zdalnej instancji
http://$JENKINS/job/$JOBNAME - dostać jedną pracę
http://$JENKINS/view/$VIEWNAME - uzyskać wszystkie zadania w określonym widoku
Dzięki odpowiedzi Larry'ego Cai udało mi się stworzyć skrypt do tworzenia kopii zapasowych wszystkich moich zadań w Jenkins. Stworzyłem pracę, która działa co tydzień. Jeśli ktoś uzna to za przydatne, oto:
#!/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
Importuj zadania
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
Dla tych z nas w świecie Windows, którzy mogą, ale nie muszą mieć dostępnego Basha, oto mój port PowerShell Katu i Larry'ego Cai . Mam nadzieję, że to komuś pomoże.
##### 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"
To może działać dla niektórych, ale nie dla mnie. Działa to tylko wtedy, gdy nowa instancja Jenkins ma bezpośredni dostęp do starej instancji Jenkins. Moje były w dwóch różnych sieciach.
Justin Domnitz
1
Prosty skrypt php działał dla mnie.
Eksport:
// 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);
}
Import:
<?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);
}
Najłatwiejszym sposobem, z bezpośrednim dostępem do maszyny, jest skopiowanie folderu zadania z pierwszego jenkinsa do innego (możesz wykluczyć obszary robocze - workspacefolder), ponieważ cała konfiguracja zadania jest przechowywana w pliku xml na dysku.
A potem tylko w nowych jenkinsach reload configuration w ustawieniach globalnych (wymagany jest dostęp administratora) powinno wystarczyć, jeśli nie, musisz ponownie uruchomić narzędzie Jenkins.
Innym sposobem może być użycie wtyczek wymienionych powyżej w tym poście.
edycja: - na wypadek, gdybyś prawdopodobnie mógł również wykluczyć modulesfoldery
Odpowiedzi:
Jenkins ma dość dobrą wiki, choć trudną do odczytania, gdy jesteś nowy w oprogramowaniu CI ...
Oferują proste rozwiązanie do przenoszenia zadań między serwerami
Sztuczka prawdopodobnie polegała na konieczności ponownego załadowania konfiguracji ze strony konfiguracji Jenkins.
Aktualizacja 2020.03.10
Krajobraz JenkinsCI bardzo się zmienił ... Od jakiegoś czasu korzystam z Job DSL . Mamy SEED Job, który generuje resztę zadań.
Pomaga nam to odtworzyć lub przenieść na serwer Jenkins, gdy zajdzie taka potrzeba :) Możesz również zaktualizować te pliki, aby uzyskać jeszcze większą łatwość konserwacji!
źródło
Prawdopodobnie skorzystaj z linii poleceń jenkins to kolejna opcja, patrz https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI
Więc możesz to zrobić
Działa dla mnie dobrze i jestem przyzwyczajony do przechowywania w moim systemie kontroli wersji
źródło
Jednowarstwowy:
Z uwierzytelnieniem:
W przypadku Okruchów, jeśli CSRF jest aktywny ( zobacz szczegóły tutaj ):
Zdobądź okruchy dzięki:
Nałożyć okruchy za pomocą
-H CRUMB
:źródło
http://OLD_JENKINS/job/JOBNAME/config.xml
łącza w przeglądarce, aby pobraćconfig.xml
plik.--data-binary
zamiast-d
wcurl
poleceniu, ponieważ-d
może zepsuć białe znaki w twoich skryptach.Istnieje wtyczka o nazwie Job Import Plugin, która może być tym, czego szukasz. Użyłem tego. Ma problemy z importowaniem projektów z serwera, który nie pozwala na anonimowy dostęp.
Dla kompletności: Jeśli masz dostęp z linii poleceń do obu, możesz wykonać procedurę już wspomnianą przez Khez w zakresie przenoszenia, kopiowania i zmiany nazwy Jenkins Jobs .
źródło
Przejdź do strony głównej serwera Jenkins, kliknij interfejs API REST u dołu strony:
Aby utworzyć nowe zadanie, opublikuj
config.xml
pod tym adresem URL z parametrem zapytanianame=JOBNAME
. Musisz wysłaćContent-Type: application/xml
nagłówek. Otrzymasz200
kod stanu, jeśli tworzenie się powiedzie, lub4xx/5xx
kod, jeśli się nie powiedzie.config.xml
jest formatem używanym przez Jenkinsa do przechowywania projektu w systemie plików, dzięki czemu można zobaczyć ich przykłady w katalogu domowym Jenkins lub pobierając konfigurację XML istniejących zadań/job/JOBNAME/config.xml
.źródło
W mojej instancji Jenkins (wersja 1.548) plik konfiguracyjny znajduje się w:
/var/lib/jenkins/jobs/-the-project-name-/config.xml
Należy do użytkownika jenkins i grupy jenkins z uprawnieniami 644. Kopiowanie pliku do i stąd powinno działać. Nie próbowałem zmieniać go bezpośrednio, ale utworzyłem kopię zapasową konfiguracji z tego miejsca na wypadek, gdyby projekt musiał zostać ponownie skonfigurowany.
źródło
C:\Users\{admin-user}\.jenkins\jobs\-the-project-name-\config.xml
Wtyczka Job Import to prosty sposób na importowanie zadań z innej instancji Jenkins. Wystarczy podać adres URL źródłowej instancji Jenkinsa. Zdalny adres URL Jenkins może przyjmować dowolny z następujących typów adresów URL:
http://$JENKINS
- pobierz wszystkie zadania na zdalnej instancjihttp://$JENKINS/job/$JOBNAME
- dostać jedną pracęhttp://$JENKINS/view/$VIEWNAME
- uzyskać wszystkie zadania w określonym widokuźródło
Dzięki odpowiedzi Larry'ego Cai udało mi się stworzyć skrypt do tworzenia kopii zapasowych wszystkich moich zadań w Jenkins. Stworzyłem pracę, która działa co tydzień. Jeśli ktoś uzna to za przydatne, oto:
źródło
W przeglądarce internetowej odwiedź:
Po prostu zapisz plik na dysku.
źródło
Jenkins eksportuje zadania do katalogu
Importuj zadania
źródło
Dla tych z nas w świecie Windows, którzy mogą, ale nie muszą mieć dostępnego Basha, oto mój port PowerShell Katu i Larry'ego Cai . Mam nadzieję, że to komuś pomoże.
źródło
To bardzo proste, wystarczy pobrać nazwę wtyczki
Wtyczka importu zadań
Wprowadź adres URL swojego zdalnego serwera Jenkins, aby automatycznie zaimportować zadania
źródło
Prosty skrypt php działał dla mnie.
Eksport:
Import:
źródło
Nie działa to w przypadku istniejących zleceń, jednak istnieje narzędzie do tworzenia zleceń Jenkins .
Pozwala to zachować definicje zadań w plikach yaml oraz w bardzo przenośnym repozytorium git.
źródło
Najłatwiejszym sposobem, z bezpośrednim dostępem do maszyny, jest skopiowanie folderu zadania z pierwszego jenkinsa do innego (możesz wykluczyć obszary robocze -
workspace
folder), ponieważ cała konfiguracja zadania jest przechowywana w pliku xml na dysku.A potem tylko w nowych jenkinsach
reload configuration
w ustawieniach globalnych (wymagany jest dostęp administratora) powinno wystarczyć, jeśli nie, musisz ponownie uruchomić narzędzie Jenkins.Innym sposobem może być użycie wtyczek wymienionych powyżej w tym poście.
edycja: - na wypadek, gdybyś prawdopodobnie mógł również wykluczyć
modules
folderyźródło
Ręczne importowanie zadań: alternatywny sposób
Prześlij zadania do Git (kontrola wersji) Zasadniczo prześlij config.xml zadania.
Jeśli serwery Linux:
Uruchom ponownie Jenkins
źródło
Jako użytkownik sieci web możesz eksportować, przechodząc do Historii konfiguracji zadań, a następnie eksportując XML.
Nie mam dostępu do komputera, na którym działa Jenkins i chciałem wyeksportować jako kopię zapasową.
Jeśli chodzi o importowanie xml jako użytkownika internetowego, nadal chciałbym wiedzieć.
źródło