Back Up Jenkins instance except for workspace and build logs
Our Jenkins
setup has a lot of cool features and configuration.
It has ‘project-based security’, it has parametrized projects, multiple source code management blocks per project and fairly extensive tests implemented with several build steps.
Of course, we do not want to lose them, so we make backups often.
The commands we use for the backup are the following.
jenkins_folder="/var/lib/jenkins/"; backup_folder="$HOME/jenkins/`date +%F`"; mkdir -p "$backup_folder"; (cd "$jenkins_folder"/jobs/; find . -mindepth 3 -type d -regex '.*/[0-9]*$' -print) | sed 's|./|jobs/|' | sudo rsync --archive --exclude 'workspace/*' --exclude-from=- "$jenkins_folder" "$backup_folder";
Explanation of commands:
- In
backup_folder="$HOME/jenkins/`date +%F`";
we used the$HOME
variable instead of the tilde~
as this would create a folder in the current directory called~
instead of creating a new folder calledjenkins
in the home directory. mkdir -p "$backup_folder";
instructsmkdir
to create all parent folders needed to create our destination folder.(cd "$jenkins_folder"/jobs/; find . -mindepth 3 -type d -regex '.*/[0-9]*$' -print)
navigates to the directory ofjenkins
before performing the search, this way the result file names will be relative to the installation location which we need later to pass torsync
.
Then we search for all folders which their name is numeric and they at least on depth 3. We filter by depth as well to avoid matching folders directly in the jobs folder.sed 's|./|jobs/|'
replaces the prefix./
withjobs/
to match the relative path from wherersync
will work fromsudo rsync --archive --exclude 'workspace/*' --exclude-from=- "$jenkins_folder" "$backup_folder";
it will copy everything from$jenkins_folder
to the folder$backup_folder
while excluding the data in workspace and the folders matched fromfind
(the job build folders).
--exclude-from=-
instructsrsync
to read fromstdin
the list of files to exclude.