Skip to content

Instantly share code, notes, and snippets.

@cenkalti
Last active November 8, 2024 11:48
Show Gist options
  • Save cenkalti/5089392 to your computer and use it in GitHub Desktop.
Save cenkalti/5089392 to your computer and use it in GitHub Desktop.
Backup Jenkins home periodicallly with git.
#!/bin/bash
# Setup
#
# - Create a new Jenkins Job
# - Mark "None" for Source Control Management
# - Select the "Build Periodically" build trigger
# - configure to run as frequently as you like
# - Add a new "Execute Shell" build step
# - Paste the contents of this file as the command
# - Save
#
# NOTE: before this job will work, you'll need to manually navigate to the $JENKINS_HOME directory
# and do the initial set up of the git repository.
# Make sure the appropriate remote is added and the default remote/branch set up.
#
# Jenkins Configuraitons Directory
cd $JENKINS_HOME
# Add general configurations, job configurations, and user content
git add -- *.xml jobs/*/*.xml userContent/*
# only add user configurations if they exist
if [ -d users ]; then
user_configs=`ls users/*/config.xml`
if [ -n "$user_configs" ]; then
git add $user_configs
fi
fi
# mark as deleted anything that's been, well, deleted
to_remove=`git status | grep "deleted" | awk '{print $3}'`
if [ -n "$to_remove" ]; then
git rm --ignore-unmatch $to_remove
fi
git commit -m "Automated Jenkins commit"
git push -q -u origin master
Copy link

ghost commented Sep 26, 2020

transistorgit's comment was mangled by the Markdown renderer, but I think this was the intention:

The initial script works fine for me, but leaves out some more complex (deeper nested) jobs.
So I added
shopt -s globstar
at the beginning and changed
git add -- *.xml jobs/*/*.xml userContent/*
to
git add -- *.xml jobs/**/config.xml userContent/*

@mirkokg
Copy link

mirkokg commented Nov 4, 2020

This script has one issue though, folders and build history are not saved.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment