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ć?

kenorb
źródło
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
Gepser
źródło
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?

kenorb
źródło
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.

avi
źródło
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ą.

Adam Berry
źródło
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.

Bibin Wilson
źródło
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
nickcheng
źródło
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.

Saikat Sengupta
źródło
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.

mandarynka
źródło