DevOps Intermediate

Jenkins Backup and Restore

Backs up and restores Jenkins configuration, jobs and plugins.

Published: May 06, 2024

Detailed Information

This script backs up and restores Jenkins CI/CD server configuration, jobs and plugins. Ensures security of Jenkins data.

What Does This Script Do?

This script performs Jenkins backup and restore operations:

  • Backs up Jenkins home directory
  • Backs up job configurations
  • Backs up plugins
  • Backs up configuration files
  • Restores from backup

Why Should You Use It?

Jenkins backup is critical for CI/CD process security:

  • Disaster Recovery: Quick restore in case of server crash
  • Configuration Management: Backup configuration changes
  • Migration: Move Jenkins to another server

How to Use

Step-by-Step Usage Guide

1. Backup

chmod +x jenkins_backup.sh
./jenkins_backup.sh backup

2. Restore

./jenkins_backup.sh restore /backup/jenkins/jenkins_backup_20240505_120000.tar.gz

Requirements

Requirements

  • Jenkins: Jenkins must be installed
  • Root Privileges: To stop Jenkins service

Use Cases

Use Cases

1. Regular Backup

Regularly back up Jenkins configuration.

2. Disaster Recovery

Quickly restore in case of server crash.

Examples

Usage Examples

Example 1: Backup

./jenkins_backup.sh backup

Example 2: Restore

./jenkins_backup.sh restore /backup/jenkins/jenkins_backup_20240505_120000.tar.gz

Code

#!/bin/bash

# Jenkins Backup and Restore Script

JENKINS_HOME="${JENKINS_HOME:-/var/lib/jenkins}"
BACKUP_DIR="/backup/jenkins"
ACTION="${1:-backup}"

if [ ! -d "$JENKINS_HOME" ]; then
    echo "Error: Jenkins home directory not found: $JENKINS_HOME"
    exit 1
fi

mkdir -p "$BACKUP_DIR"

if [ "$ACTION" = "backup" ]; then
    DATE=$(date +%Y%m%d_%H%M%S)
    BACKUP_FILE="$BACKUP_DIR/jenkins_backup_${DATE}.tar.gz"
    
    echo "Backing up Jenkins..."
    echo "Jenkins Home: $JENKINS_HOME"
    echo "Backup File: $BACKUP_FILE"
    echo ""
    
    tar -czf "$BACKUP_FILE" -C "$(dirname "$JENKINS_HOME")" "$(basename "$JENKINS_HOME")"
    
    if [ $? -eq 0 ]; then
        SIZE=$(du -h "$BACKUP_FILE" | cut -f1)
        echo "✓ Backup completed: $BACKUP_FILE ($SIZE)"
    else
        echo "✗ Backup failed!"
        exit 1
    fi
    
elif [ "$ACTION" = "restore" ]; then
    if [ -z "$2" ]; then
        echo "Usage: $0 restore <backup_file>"
        exit 1
    fi
    
    BACKUP_FILE="$2"
    
    if [ ! -f "$BACKUP_FILE" ]; then
        echo "Error: Backup file not found: $BACKUP_FILE"
        exit 1
    fi
    
    echo "Restoring Jenkins from backup..."
    echo "Backup File: $BACKUP_FILE"
    echo "Jenkins Home: $JENKINS_HOME"
    echo ""
    echo "⚠️  WARNING: This will overwrite current Jenkins configuration!"
    read -p "Continue? (y/n): " CONFIRM
    
    if [ "$CONFIRM" != "y" ]; then
        echo "Restore cancelled"
        exit 0
    fi
    
    systemctl stop jenkins
    
    if [ -d "$JENKINS_HOME" ]; then
        mv "$JENKINS_HOME" "${JENKINS_HOME}_old_$(date +%Y%m%d_%H%M%S)"
    fi
    
    tar -xzf "$BACKUP_FILE" -C "$(dirname "$JENKINS_HOME")"
    
    chown -R jenkins:jenkins "$JENKINS_HOME"
    
    systemctl start jenkins
    
    echo "✓ Restore completed!"
else
    echo "Usage: $0 [backup|restore] [backup_file]"
    exit 1
fi

Usage

chmod +x jenkins_backup.sh
./jenkins_backup.sh backup
./jenkins_backup.sh restore <backup_file>

Troubleshooting

Troubleshooting

Problem: "Jenkins home directory not found"

Solution: Set JENKINS_HOME variable:

export JENKINS_HOME=/path/to/jenkins
./jenkins_backup.sh backup

Tags

jenkins backup ci/cd devops restore