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