Comment sauvegarder et restaurer votre instance Jenkins

Protégez votre pipeline CI/CD en maîtrisant la sauvegarde et la restauration de Jenkins. Ce guide propose un tutoriel étape par étape, de niveau expert, sur la stratégie de sauvegarde la plus fiable : la méthode par système de fichiers. Apprenez à identifier et à archiver les données critiques au sein du répertoire `$JENKINS_HOME`, en vous concentrant sur les configurations, les jobs et les clés de sécurité tout en excluant les artefacts de construction volumineux. Nous couvrons également les étapes essentielles pour restaurer une instance, y compris les corrections cruciales des permissions de fichiers, assurant une reprise après sinistre rapide et transparente pour votre environnement Jenkins.

44 vues

Comment sauvegarder et restaurer votre instance Jenkins

Jenkins sert de plaque tournante centrale d'automatisation pour l'intégration continue et la livraison continue (CI/CD). Les données de configuration — y compris les définitions de tâches, les informations d'identification des utilisateurs, les paramètres des plugins et l'historique des constructions — représentent un investissement organisationnel important. La perte de ces données due à une défaillance matérielle, une erreur de configuration ou une migration peut stopper complètement les pipelines de développement.

Ce guide complet détaille les composants essentiels d'une stratégie de sauvegarde Jenkins robuste, en se concentrant sur la méthode très fiable de l'instantané du système de fichiers. Nous fournirons des instructions étape par étape pour sauvegarder votre instance en toute sécurité et la procédure correspondante pour la restaurer sans heurts, garantissant ainsi la continuité des activités et la tranquillité d'esprit.

Comprendre le cœur : le répertoire $JENKINS_HOME

Chaque instance Jenkins repose sur un répertoire racine unique, désigné sous le nom de $JENKINS_HOME. Ce répertoire contient tous les fichiers de configuration, les plugins, les journaux et les données des tâches. Sauvegarder Jenkins signifie fondamentalement sauvegarder le contenu de ce répertoire.

Selon votre méthode d'installation (par exemple, paquet Linux, conteneur Docker), l'emplacement de $JENKINS_HOME varie généralement :

  • Linux (Installation par paquet) : /var/lib/jenkins
  • Docker : Souvent monté sur un volume, par exemple /var/jenkins_home
  • JAR autonome : Le répertoire d'où le processus Jenkins a été démarré, sauf indication contraire via les variables d'environnement.

Identification des composants de données critiques

Bien que la sauvegarde de l'intégralité du répertoire $JENKINS_HOME soit l'approche la plus simple, elle peut conduire à des archives extrêmement volumineuses si l'historique des constructions et les données de l'espace de travail sont inclus. Pour une sauvegarde de reprise après sinistre rapide et efficace, vous devez vous assurer que les répertoires et fichiers suivants sont capturés :

Composant Chemin dans $JENKINS_HOME Objectif
Configuration globale config.xml Fichier de configuration principal pour l'instance racine de Jenkins.
Définitions de tâches jobs/ Contient des sous-répertoires pour chaque tâche configurée, chacun avec son propre config.xml.
Utilisateurs et identifiants users/ et credentials.xml Comptes utilisateurs, paramètres du domaine de sécurité et secrets stockés.
Clés de sécurité secrets/ Clés de chiffrement essentielles pour déchiffrer les données sensibles comme les identifiants stockés.
Liste des plugins plugins/ Contient les fichiers .hpi pour tous les plugins installés.
Définitions de nœuds nodes/ Configurations pour tous les agents de construction connectés (s'ils sont définis).

Méthode 1 : La sauvegarde du système de fichiers (Recommandée)

La méthode la plus fiable pour sauvegarder Jenkins consiste à créer une archive compressée et cohérente des fichiers nécessaires pendant que le service est brièvement arrêté.

Étape 1 : Arrêter le service Jenkins

Pour garantir la cohérence des données et éviter les écritures partielles de fichiers pendant le processus de sauvegarde, le processus Jenkins doit être interrompu. Ne pas arrêter le service risque de produire une sauvegarde incomplète ou corrompue.

# Pour les systèmes utilisant systemd (la plupart des distributions Linux modernes)
sudo systemctl stop jenkins

# Ou, pour les systèmes utilisant la commande service
sudo service jenkins stop

Étape 2 : Créer l'archive de sauvegarde

Accédez au répertoire parent de $JENKINS_HOME et utilisez tar pour créer une archive compressée. Il est fortement recommandé d'exclure les artefacts de construction volumineux pour économiser de l'espace et du temps.

En supposant que $JENKINS_HOME est /var/lib/jenkins :

JENKINS_HOME="/var/lib/jenkins"
BACKUP_TARGET="/mnt/backups/jenkins"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
ARCHIVE_NAME="jenkins_backup_${TIMESTAMP}.tar.gz"

# Créer le répertoire cible s'il n'existe pas
mkdir -p $BACKUP_TARGET

# Créer l'archive, en excluant l'historique des constructions et les espaces de travail
sudo tar -czvf $BACKUP_TARGET/$ARCHIVE_NAME \n    --exclude="${JENKINS_HOME}/workspace" \n    --exclude="${JENKINS_HOME}/caches" \n    --exclude="${JENKINS_HOME}/jobs/*/builds" \n    $JENKINS_HOME

Conseil : Inclure l'historique des constructions

Si la conservation de l'historique des constructions (jobs/*/builds) est critique, vous pouvez supprimer le drapeau --exclude correspondant. Cependant, préparez-vous à ce que les tailles d'archives atteignent potentiellement des centaines de gigaoctets.

Étape 3 : Vérifier et stocker hors site

Une fois l'archive créée, testez son intégrité et transférez-la immédiatement vers un emplacement de stockage externe et géographiquement séparé (par exemple, un compartiment S3, un lecteur réseau) pour vous protéger contre une panne à l'échelle du site.

Étape 4 : Redémarrer Jenkins

sudo systemctl start jenkins

Méthode 2 : Utilisation du plugin de sauvegarde Jenkins (Solution partielle)

Bien que des plugins comme ThinBackup ou Backup Plugin existent, ils ne capturent souvent que les fichiers de configuration (config.xml) et peuvent ne pas gérer robustement les fichiers volumineux ou tous les éléments de sécurité nécessaires. Ils sont généralement adaptés à la sauvegarde des configurations de tâches uniquement et ne doivent pas être utilisés pour une stratégie complète et sécurisée de reprise après sinistre.

Restauration de votre instance Jenkins

La restauration implique de copier les données sauvegardées dans le répertoire $JENKINS_HOME de la machine cible et de s'assurer que les autorisations des fichiers sont correctes avant de démarrer le service.

Étape 1 : Préparer l'environnement cible

Assurez-vous que le système cible (ou le système réparé) a Jenkins installé, mais maintenez le service arrêté.

sudo systemctl stop jenkins

Étape 2 : Vider les données Jenkins existantes (Facultatif mais recommandé)

Si vous restaurez sur une machine qui hébergeait précédemment Jenkins, videz le contenu existant de $JENKINS_HOME pour garantir un environnement propre.

# Faites attention à la commande 'rm -rf' !
sudo rm -rf /var/lib/jenkins/*

Étape 3 : Extraire l'archive de sauvegarde

Copiez l'archive compressée (jenkins_backup_latest.tar.gz) sur la machine cible et extrayez-la dans le répertoire $JENKINS_HOME. L'indicateur -C spécifie le répertoire cible pour l'extraction.

# En supposant que l'archive est dans /tmp et que JENKINS_HOME est /var/lib/jenkins
sudo tar -xzvf /tmp/jenkins_backup_latest.tar.gz -C /var/lib/

# Remarque : Si la commande tar a inclus le répertoire parent dans l'archive, ajustez le chemin.
# Le résultat doit être le contenu de l'archive remplaçant le contenu de /var/lib/jenkins

Étape 4 : Vérifier et corriger les permissions

C'est l'étape la plus critique après la restauration. Si la propriété des fichiers est incorrecte, Jenkins ne démarrera pas ou ne fonctionnera pas de manière sécurisée. Vous devez définir la propriété de manière récursive sur l'utilisateur et le groupe sous lesquels le service Jenkins s'exécute (souvent jenkins:jenkins).

JENKINS_HOME="/var/lib/jenkins"
JENKINS_USER="jenkins"
JENKINS_GROUP="jenkins"

sudo chown -R $JENKINS_USER:$JENKINS_GROUP $JENKINS_HOME
sudo chmod -R 755 $JENKINS_HOME

Étape 5 : Démarrer Jenkins et vérifier

Démarrez le service et surveillez les journaux pour assurer un démarrage réussi.

sudo systemctl start jenkins

# Surveiller les journaux de démarrage
sudo tail -f /var/log/jenkins/jenkins.log

Après un démarrage réussi, vérifiez que toutes les tâches, les utilisateurs et les plugins installés sont présents et fonctionnent correctement.

Bonnes pratiques pour les sauvegardes automatisées

Pour aller au-delà des sauvegardes manuelles, mettez en place l'automatisation à l'aide d'outils système et de gestion de configuration externe.

1. Tirer parti des tâches Cron

Planifiez l'exécution du script de sauvegarde (Étapes 1 et 2 de la méthode 1) quotidiennement ou nocturnement à l'aide de cron ou d'un planificateur similaire. Assurez-vous que la tâche cron s'exécute en tant qu'utilisateur disposant des autorisations appropriées pour arrêter et démarrer le service Jenkins et pour lire/écrire dans le répertoire $JENKINS_HOME.

2. Configuration as Code (CasC)

Envisagez d'adopter Jenkins Configuration as Code (CasC). CasC définit les paramètres, les tâches et les plugins de Jenkins à l'aide de fichiers YAML déclaratifs. En stockant ces fichiers YAML dans un référentiel de contrôle de source séparé (comme Git), votre configuration devient portable et versionnée, simplifiant considérablement l'exigence de sauvegarde principale.

Avertissement : Sécurisation des identifiants

Lors de la restauration d'une instance, assurez-vous que le répertoire secrets/ est présent et correct. Si Jenkins ne trouve pas les clés utilisées pour chiffrer les identifiants (tels que les clés API ou les mots de passe), ces identifiants deviendront inutilisables et devront être ressaisis manuellement.