How to back up and restore Jenkins
A backup is a snapshot of the Jenkins data (jobs, configurations, secrets, plugins, etc.) at a given point in time. This backup can be used to:
- Restore Jenkins to a previous stable state (during disaster recovery).
- Migrate data to a new Jenkins charm instance.
Create a backup
- Create the backup script From Backing-up/Restoring Jenkins, This script backs up the most essential files as mentioned in the article:
- The
master.key
file. - Job-related files in the
./jobs
,./builds
and./workspace
folders. - Plugin-related files (
.hpi
and.jpi
) in the./plugins
folder.
cat <<EOF > backup.sh
#!/bin/bash
export JENKINS_HOME=/var/lib/jenkins
export JENKINS_BACKUP=/mnt/backup
echo "running backup as \$(whoami) in \$(pwd)"
mkdir -p \$JENKINS_BACKUP
cp \$JENKINS_HOME/secrets/master.key \$JENKINS_BACKUP
cp -r \$JENKINS_HOME/jobs \$JENKINS_BACKUP
cp -r \$JENKINS_HOME/builds \$JENKINS_BACKUP
cp -r \$JENKINS_HOME/workspace \$JENKINS_BACKUP
mkdir -p \$JENKINS_BACKUP/plugins
cp -r \$JENKINS_HOME/plugins/*.hpi \$JENKINS_BACKUP/plugins
cp -r \$JENKINS_HOME/plugins/*.jpi \$JENKINS_BACKUP/plugins
chown -R 2000:2000 \$JENKINS_BACKUP
tar zcvf jenkins_backup.tar.gz --directory=/mnt backup
EOF
chmod +x backup.sh
- Transfer the backup script above to the running unit of the Jenkins-k8s charm and run it
JENKINS_UNIT=jenkins-k8s/0
juju scp --container jenkins ./backup.sh $JENKINS_UNIT:/backup.sh
juju ssh --container jenkins $JENKINS_UNIT /backup.sh
- Retrieve the compressed backup file
JENKINS_UNIT=jenkins-k8s/0
juju scp --container jenkins $JENKINS_UNIT:/jenkins_backup.tar.gz jenkins_backup.tar.gz
You now have the compressed Jenkins data on your host system.
Restore the backup on a new (or existing) charm instance
- Restore the backup on the Jenkins charm unit.
JENKINS_UNIT=jenkins-k8s/0
juju scp --container jenkins ./jenkins_backup.tar.gz $JENKINS_UNIT:/jenkins_backup.tar.gz
juju ssh --container jenkins $JENKINS_UNIT tar zxvf jenkins_backup.tar.gz
juju ssh --container jenkins $JENKINS_UNIT chown -R jenkins:jenkins /backup
juju ssh --container jenkins $JENKINS_UNIT cp -avR /backup/* /var/lib/jenkins
juju ssh --container jenkins $JENKINS_UNIT rm -rf /backup /jenkins_backup.tar.gz
- Restart Pebble for the changes to take effect.
juju ssh --container jenkins $JENKINS_UNIT pebble restart jenkins