Jak wykonać kopię zapasową zadań Jenkins i konfiguracji master?


56

Chciałbym wykonać kopię zapasową wszystkich zadań Jenkins i plików konfiguracyjnych. Jak najłatwiej to zrobić?


Co próbowałeś?
— 030

1
Próbowałem tego .
— kenorb

Odpowiedzi:


33

Można to zrobić na wiele sposobów, ale najłatwiejszym sposobem jest wykonanie kopii zapasowej folderu Jenkins Home.

Możesz zobaczyć, gdzie jest twój dom Jenkins:

echo $JENKINS_HOME

I na przykład, jeśli chcesz wykonać kopię zapasową zadań, możesz przejść do:

cd $JENKINS_HOME/jobs

I wykonaj kopię zapasową tego folderu.

Cała ta konfiguracja będzie wiązką plików XML .

Jeśli używasz oficjalnego obrazu dokera Jenkins , dom będzie włączony:

/var/jenkins_home

2
Musiałem przełączyć użytkownika jenkins mieć dostęp do $JENKINS_HOMEzmiennej środowiskowej: sudo su -s /bin/bash jenkins, a następnie echo $JENKINS_HOME, co było dla mnie/var/lib/jenkins
— Bryce Guinta

2
Problem z tworzeniem kopii zapasowej „zadań” całego folderu polega na tym, że również zadania zostaną skopiowane - może to oznaczać wiele GB.
— Mike Argyriou,

Czy usługa Jenkins powinna zostać ponownie uruchomiona?
— Xin Meng

Jenkins home w MacOS (domyślna instalacja Homebrew): ~ / .jenkins
— chuckSaldana

30

Wszystkie zadania ( jobs/) i główne pliki konfiguracyjne ( config.xml) można znaleźć w folderze domowym Jenkins ( JENKINS_HOME) w następującej strukturze:

JENKINS_HOME
 +- config.xml     (jenkins root configuration)
 +- *.xml          (other site-wide configuration files)
 +- userContent    (files in this directory will be served under your http://server/userContent/)
 +- fingerprints   (stores fingerprint records)
 +- plugins        (stores plugins)
 +- workspace (working directory for the version control system)
     +- [JOBNAME] (sub directory for each job)
 +- jobs
     +- [JOBNAME]      (sub directory for each job)
         +- config.xml     (job configuration file)
         +- latest         (symbolic link to the last successful build)
         +- builds
             +- [BUILD_ID]     (for each build)
                 +- build.xml      (build result summary)
                 +- log            (log file)
                 +- changelog.xml  (change log)

Większość konfiguracji jest w formacie XML, więc wykonanie kopii zapasowej wszystkich .xmlplików powinno wystarczyć.

Wszystkie ustawienia, dzienniki kompilacji, archiwa artefaktów są przechowywane w katalogu JENKINS_HOME. Po prostu zarchiwizuj ten katalog, aby utworzyć kopię zapasową. Podobnie przywracanie danych zastępuje po prostu zawartość katalogu JENKINS_HOME z kopii zapasowej.

Kopie zapasowe można wykonywać bez zatrzymywania serwera, ale po przywróceniu zatrzymaj serwer.


Aby uzyskać spójne kopie zapasowe, dobrą praktyką jest utrzymywanie JENKINS_HOMEkatalogu w repozytorium Git.

Na przykład:

cd $JENKINS_HOME
git init
shopt -s globstar
git add **/config.xml
git commit -m'Added job config files' -a

i wypychanie plików do zewnętrznego repozytorium. Możesz również dodać następujący .gitignoreplik, aby zignorować niektóre pliki.

Powiązane: Czy istnieje sposób na utrzymanie plików konfiguracyjnych Hudson / Jenkins w kontroli źródła?


Jak często tworzysz kopię zapasową? Czy wypychasz kod automatycznie do repozytorium git? Jeśli to prawda, czy tworzysz żądanie ściągnięcia, które należy scalić ręcznie (interwencja ręczna) w celu sprawdzenia integralności kopii zapasowej?
— 030

2
@ 030 Zwykle ręcznie po kilku poważnych zmianach, gdy wiem, że konfiguracja jest stabilna i muszę ją wykonać, ponieważ Jenkins często lubi łamać rzeczy, takie jak samodzielna zmiana slaveów z Uniksa na Windows, usuwanie haseł z formularzy, więc mając je w git / GitHub, mogę łatwo porównać i znaleźć brakujące dane i dodać je z powrotem lub przywrócić określony plik. Istnieją pewne wtyczki do przechowywania zmian historii, ale nie uważam tego za przydatne.
— kenorb

Przechowujesz hasła w git? Czy je szyfrujesz? Czy używasz również rurociągów zwanych Pipeline jako Code?
— 030

3
@ 030 Jenkins domyślnie szyfruje hasła / dane uwierzytelniające, ale można je łatwo odszyfrować . Jednak bez klucza głównego (który nie powinien być częścią kopii zapasowej) ani dostępu do Jenkinsa nikt inny nie może. Nie używam Pipeline jako kodu.
— kenorb

Jak testujesz integralność tej kopii zapasowej w git? Np. Czy uruchamiasz maszynę wirtualną lub system dokerów, montujesz repozytorium git i sprawdzasz, czy wszystko nadal działa?
— 030

11

Jeśli twoje zadania Jenkins są zdefiniowane w pliku Jenkins, możesz je przechowywać w repozytorium git i załadować za pomocą Pipeline .

Niestety, ponieważ nie wszystkie wtyczki Jenkins obsługują Jenkinsfile i Pipeline, będziesz musiał ręcznie utworzyć nowe Jenkinsfile, jeśli chcesz przenieść istniejące zadania do tego formatu.


9

SCM Konfiguracja Plugin Sync robi dokładnie to, co chcesz. Współpracuje z svn lub git, aby wykonać kopię zapasową rdzenia jenkins i konfiguracji zadania, więc umożliwia łatwe śledzenie, kto dokonał zmian, a także kopię zapasową.


1
Dosłownie taruję folder $ JENKINS_HOME, ale wydaje się, że jest o wiele lepiej.
— MrMesees

2
Że wtyczki wydają się dość nieaktywne / martwe - czy są naprawdę funkcjonalne i równe od 2017 roku?
— Tuukka Mustonen

5

Istnieje kilka sposobów tworzenia kopii zapasowych danych Jenkins i konfiguracji głównych. Najlepszym sposobem tworzenia kopii zapasowych jest użycie wtyczki Thinbackup. Możesz zaplanować terminowe tworzenie kopii zapasowych za pomocą wyrażeń cron. Możesz również skonfigurować pełną i przyrostową kopię zapasową.

Innym sposobem tworzenia kopii zapasowych danych i konfiguracji jest zrobienie migawki dysku z głównego serwera Jenkins. Idealny sposób na to, podłączając dysk i łącząc katalog konfiguracji jenkins z punktem montowania dysku

Oba scenariusze są dobrze wyjaśnione w tym poście na blogu . Dostaniesz lepszy pomysł i kroki dla konfiguracji.


3

Używam skryptów z sue445/jenkins-backup-script.

Archiwizuje ustawienia i wtyczki Jenkins, takie jak:

  • $JENKINS_HOME/*.xml
  • $JENKINS_HOME/jobs/*/*.xml
  • $JENKINS_HOME/nodes/*
  • $JENKINS_HOME/plugins/*.jpi
  • $JENKINS_HOME/secrets/*
  • $JENKINS_HOME/users/*

Stosowanie

./jenkins-backup.sh /path/to/jenkins_home archive.tar.gz

# add timestamp suffix
./jenkins-backup.sh /path/to/jenkins_home backup_`date +"%Y%m%d%H%M%S"`.tar.gz

3

Możesz wypróbować wtyczkę thinBackup (nawet jeśli nie jest aktywnie utrzymywana) [jeśli wykonanie logicznej kopii zapasowej jest wszystkim, czego potrzebujesz] (tzn. Większość plików konfiguracyjnych xml, zadań, węzłów itp.). Rozmiar kopii zapasowej nie będzie ogromny.


1

Musiałem migrować Jenkins z jednej instancji Windows Server do drugiej. W końcu udało mi się to zrobić w ten sposób:

  • Zatrzymaj usługę Jenkins (jeśli możesz sobie na to pozwolić)
  • Skopiuj cały folder Jenkins (domyślnie C:\Program Files x86\Jenkins)
  • Wklej do nowej instancji
  • Wejdź do katalogu i uruchom jenkins.exe install

Spowoduje to zarejestrowanie świeżo wklejonej Jenkins jako usługi na nowej maszynie i będzie działać w 100% tak samo.

Jeśli to zadziała, to jeśli potrzebujesz kopii zapasowej tylko dla przyszłego bezpieczeństwa, skopiuj gdzieś folder Jenkins. Będzie działać jak migawka.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.