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$HOMEvariable instead of the tilde~as this would create a folder in the current directory called~instead of creating a new folder calledjenkinsin the home directory. mkdir -p "$backup_folder";instructsmkdirto 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 ofjenkinsbefore 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 wherersyncwill work fromsudo rsync --archive --exclude 'workspace/*' --exclude-from=- "$jenkins_folder" "$backup_folder";it will copy everything from$jenkins_folderto the folder$backup_folderwhile excluding the data in workspace and the folders matched fromfind(the job build folders).
--exclude-from=-instructsrsyncto read fromstdinthe list of files to exclude.
This post is also available in: Greek


