Comment sauvegardez-vous les travaux Jenkins et les configurations de maître?

56

Je voudrais sauvegarder tous les travaux Jenkins et les fichiers de configuration. Quel est le moyen le plus simple de le faire?

Kenorb
la source
Qu'as-tu essayé?
030
1
J'ai essayé ça .
Kenorb

Réponses:

33

Il existe plusieurs façons de procéder, mais la meilleure façon de procéder est de sauvegarder le dossier Jenkins Home.

Vous pouvez voir où se trouve votre maison Jenkins avec:

echo $JENKINS_HOME

Et par exemple, si vous souhaitez uniquement sauvegarder les travaux, vous pouvez accéder à:

cd $JENKINS_HOME/jobs

Et faites une sauvegarde pour ce dossier.

Toute cette configuration sera un tas de fichiers XML .

Si vous utilisez l' image officielle du docker Jenkins , la maison sera sur:

/var/jenkins_home
Gepser
la source
2
J'avais besoin de passer à l'utilisateur jenkins pour avoir accès à la $JENKINS_HOMEvariable d'environnement :, sudo su -s /bin/bash jenkinset ensuite echo $JENKINS_HOME, qui pour moi était/var/lib/jenkins
Bryce Guinta
2
Le problème avec la sauvegarde de l'ensemble des «travaux» du dossier est que les exécutions de travail sont également copiées (cela peut signifier beaucoup de Go).
Mike Argyriou
Si le service de Jenkins doit redémarrer?
Xin Meng
Maison Jenkins sous MacOS (installation par défaut de Homebrew): ~ / .jenkins
chuckSaldana
30

Tous les travaux ( jobs/) et fichiers de configuration principaux ( config.xml) peuvent être trouvés dans le dossier personnel Jenkins ( JENKINS_HOME) dans la structure suivante:

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)

La plupart des configurations étant au format XML, la sauvegarde de tous les .xmlfichiers devrait suffire.

Tous les paramètres, les journaux de construction, les archives d'artefacts sont stockés dans le répertoire JENKINS_HOME. Archivez simplement ce répertoire pour faire une sauvegarde. De même, la restauration des données ne fait que remplacer le contenu du répertoire JENKINS_HOME à partir d'une sauvegarde.

Des sauvegardes peuvent être effectuées sans arrêter le serveur, mais lors de la restauration, arrêtez le serveur.


Pour des sauvegardes cohérentes, il est recommandé de conserver le JENKINS_HOMErépertoire dans le référentiel Git.

Par exemple:

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

et pousser les fichiers dans le référentiel externe. Vous pouvez également ajouter le .gitignorefichier suivant pour ignorer certains fichiers.

Connexe: Existe - t-il un moyen de conserver les fichiers de configuration Hudson / Jenkins dans le contrôle de source?

Kenorb
la source
À quelle fréquence créez-vous une sauvegarde? Est-ce que vous envoyez le code automatiquement dans un dépôt git? Si la valeur est true, créez-vous une demande d'extraction qui doit être fusionnée manuellement (intervention manuelle) pour effectuer une vérification de l'intégrité de la sauvegarde?
030
2
@ 030 Habituellement, manuellement, après quelques modifications majeures, quand je sais que la configuration est stable et que je dois la sauvegarder, Jenkins aime souvent casser des choses, comme changer d'esclave d'Unix en windows par lui-même, supprimer les mots de passe des formulaires, etc. les avoir dans git / GitHub, je peux facilement comparer et trouver les données manquantes et les rajouter ou restaurer un fichier spécifique. Il y a quelques plugins pour garder les changements d'historique, mais je ne l'ai pas trouvé utile.
Kenorb
Vous stockez les mots de passe dans git? Est-ce que vous les chiffrez? Utilisez-vous aussi les pipelines ou Pipeline comme code?
030
3
@ 030 Jenkins chiffre les mots de passe / identifiants par défaut, mais vous pouvez facilement les déchiffrer . Cependant, sans la clé principale (qui ne devrait pas faire partie de la sauvegarde) ou l'accès à Jenkins, personne d'autre ne le peut. Je n'utilise pas Pipeline comme code.
Kenorb
Comment testez-vous l'intégrité de cette sauvegarde dans git? Par exemple, lancez-vous une machine virtuelle ou un système Docker, montez-vous le dépôt Git et vérifiez-vous que tout fonctionne toujours?
030
11

Si vos travaux Jenkins sont définis dans un fichier Jenkins, vous pouvez le stocker dans un référentiel git et le charger à l'aide de Pipeline .

Malheureusement, tous les plug-ins Jenkins ne prenant pas en charge Jenkinsfile et Pipeline, vous devrez créer manuellement de nouveaux fichiers Jenkins si vous souhaitez déplacer les travaux existants vers ce format.

avi
la source
9

Le plug - in de configuration SCM Sync fait exactement ce que vous souhaitez. Fonctionne avec svn ou git pour sauvegarder votre noyau jenkins et la configuration de votre travail. Vous pouvez ainsi facilement savoir qui a effectué les modifications et effectuer une sauvegarde.

Adam Berry
la source
1
Je tar littéralement le dossier $ JENKINS_HOME, mais cela semble tellement mieux.
MrMesees
2
Ce plugin semble plutôt inactif / mort - est-il vraiment fonctionnel et à égalité en 2017?
Tuukka Mustonen
5

Il existe peu de moyens de sauvegarder les données jenkins et les configurations principales. Le meilleur moyen de sauvegarde est d'utiliser le plugin Thinbackup. Vous pouvez planifier des sauvegardes ponctuelles à l'aide d'expressions cron. Vous pouvez également configurer une sauvegarde complète et une sauvegarde incrémentielle.

Une autre façon de sauvegarder les données et la configuration consiste à prendre un instantané de disque de votre serveur maître jenkins. Le moyen idéal pour cela consiste à monter un disque et à lier le répertoire de configuration jenkins au point de montage du disque.

Les deux scénarios sont bien expliqués dans cet article de blog . Vous aurez une meilleure idée et des étapes pour les configurations.

Bibin Wilson
la source
3

J'utilise des scripts de sue445/jenkins-backup-script.

Il archive les paramètres et les plugins Jenkins tels que:

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

Usage

./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
la source
3

Vous pouvez essayer le plug- in thinBackup (même s’il n’est pas maintenu activement) [si vous souhaitez effectuer une sauvegarde logique ] (c.-à-d. La plupart des fichiers xml de config, des travaux, des nœuds, etc.). La taille de la sauvegarde ne sera pas énorme.

Saikat Sengupta
la source
1

Je devais migrer un Jenkins d'une instance Windows Server à une autre. Finalement j'ai réussi à le faire comme ça:

  • Arrêtez le service Jenkins (si vous pouvez vous le permettre)
  • Copier l'intégralité du dossier Jenkins (par défaut C:\Program Files x86\Jenkins)
  • Coller sur la nouvelle instance
  • Allez dans le répertoire et lancez jenkins.exe install

Cela enregistrera Jenkins fraîchement collé en tant que service sur la nouvelle machine et fonctionnera à 100% de la même manière.

Si cela fonctionne, si vous avez besoin d'une sauvegarde uniquement pour des raisons de sécurité, copiez le dossier Jenkins quelque part. Cela fonctionnera comme un instantané.

mandarin
la source