58

I'd like to backup all Jenkins jobs and config files. What's the easiest way of doing it?

  • What did you try? – 030 Apr 26 '18 at 22:12
  • 1
    I tried this. – kenorb Apr 26 '18 at 22:13
35

There are many ways to do this but the easiest way I can think is doing a backup of the Jenkins Home folder.

You can see where is your Jenkins home with:

echo $JENKINS_HOME

And for example, if you only want to backup the jobs you can go to:

cd $JENKINS_HOME/jobs

And make a backup for that folder.

All that configuration will be a bunch of XML files.

If you are using the official Jenkins docker image, the home will be on:

/var/jenkins_home
  • 2
    I needed to switch to the jenkins user to have access to the $JENKINS_HOME environment variable: sudo su -s /bin/bash jenkins, and then echo $JENKINS_HOME, which for me was /var/lib/jenkins – Bryce Guinta Sep 25 '17 at 18:00
  • 2
    The problem with backing up the whole folder 'jobs' is that also the job executions will be copied - this may mean many GB. – Mike Argyriou Oct 22 '17 at 8:56
  • Whether the service of Jenkins should restart? – Xin Meng May 4 '18 at 15:35
  • Jenkins home in MacOS (Homebrew default installation): ~/.jenkins – chuckSaldana Apr 13 at 14:16
32

All jobs (jobs/) and master config files (config.xml) can be found in Jenkins home folder (JENKINS_HOME) in the following structure:

JENKINS_HOME
 +- config.xml     (jenkins root configuration)
 +- *.xml          (other site-wide configuration files)
 +- userContent    (files in this directory will be served under your http://server/userContent/)
 +- fingerprints   (stores fingerprint records)
 +- plugins        (stores plugins)
 +- workspace (working directory for the version control system)
     +- [JOBNAME] (sub directory for each job)
 +- jobs
     +- [JOBNAME]      (sub directory for each job)
         +- config.xml     (job configuration file)
         +- latest         (symbolic link to the last successful build)
         +- builds
             +- [BUILD_ID]     (for each build)
                 +- build.xml      (build result summary)
                 +- log            (log file)
                 +- changelog.xml  (change log)

Most of the config are in XML format, so backing all .xml files should be enough.

All the settings, build logs, artifact archives are stored under the JENKINS_HOME directory. Simply archive this directory to make a back up. Similarly, restoring the data is just replacing the contents of the JENKINS_HOME directory from a back up.

Back ups can be taken without stopping the server, but when you restore, please do stop the server.


For consistent backups it is good practise to keep JENKINS_HOME directory under Git repository.

For example:

cd $JENKINS_HOME
git init
shopt -s globstar
git add **/config.xml
git commit -m'Added job config files' -a

and pushing the files to the external repository. You can also add the following .gitignore file to ignore some files.

Related: Is there a way to keep Hudson / Jenkins configuration files in source control?

  • How often do you create a backup? Do you push the code automatically to a git repository? If true, do you create a Pull Request that has to be merged manually (manual intervention) to do some backup integrity check? – 030 Apr 26 '18 at 22:16
  • 2
    @030 Usually manually after some major changes, when I know the config is stable and I need to backup it, as Jenkins often likes to break things, such as changing slaves from unix to windows by it-self, removing passwords from forms, so having them in git/GitHub, I can easily compare and find the missing data and add it back or revert some specific file. There are some plugins to keep history changes, but I didn't find it useful. – kenorb Apr 26 '18 at 22:19
  • You store the passwords in git? Do you encrypt them? Do you use pipelines aka Pipeline as Code as well? – 030 Apr 26 '18 at 22:23
  • 3
    @030 Jenkins encrypts passwords/credentials by default, but you can easily decrypt them. However, without the master key (which should be not part of the backup) or access to Jenkins, nobody else can. I'm not using Pipeline as Code. – kenorb Apr 26 '18 at 22:24
  • How do you test the integrity of this backup in git? E.g. do you spin up a virtual machine or docker system, mount the git repo and check whether everything still works? – 030 Apr 26 '18 at 22:27
11

If your Jenkins jobs are defined in a Jenkinsfile you can store it in a git repository and have it loaded up by using Pipeline.

Unfortunately, since not all Jenkins plugins support Jenkinsfile and Pipeline, you will need to manually create new Jenkinsfiles if you wish to move existing jobs to this format.

9

The SCM Sync Configuration Plugin does exactly what you wish. Works with either svn or git to backup your jenkins core and job configuration, so gives you easy tracking as to who made changes, as well as a backup.

  • 1
    I literally tar the $JENKINS_HOME folder, but this seems soooo much better. – MrMesees Apr 14 '17 at 21:18
  • 2
    That plugins seems pretty inactive/dead - is it really functional and on-par as of 2017? – Tuukka Mustonen Oct 23 '17 at 9:35
5

There are few ways to backup jenkins data and master configurations. The best way for backup is to use the Thinbackup plugin. You can schedule timely backups using cron expressions. You can configure full backup and incremental backup as well.

Another way to backup data and config is to take the disk snapshot of your jenkins master server. The ideal way to do this by mounting a disk and link the jenkins config directory to the disk mount point

Both the scenarios are well explained in this blog post. You will get a better idea and steps for the configurations.

3

I'm using scripts from sue445/jenkins-backup-script.

It archives Jenkins settings and plugins such as:

  • $JENKINS_HOME/*.xml
  • $JENKINS_HOME/jobs/*/*.xml
  • $JENKINS_HOME/nodes/*
  • $JENKINS_HOME/plugins/*.jpi
  • $JENKINS_HOME/secrets/*
  • $JENKINS_HOME/users/*

Usage

./jenkins-backup.sh /path/to/jenkins_home archive.tar.gz

# add timestamp suffix
./jenkins-backup.sh /path/to/jenkins_home backup_`date +"%Y%m%d%H%M%S"`.tar.gz
3

You can try the thinBackup plugin (even though it is not actively maintained) [if taking a logical backup is all you want] (i.e. most of the config xml files, jobs, nodes etc). The backup size won't be huge.

1

I needed to migrate a Jenkins from one Windows Server instance to another. Finally I managed to do it like that:

  • Stop the Jenkins service (if you can afford it)
  • Copy the entire Jenkins folder (by default C:\Program Files x86\Jenkins)
  • Paste onto the new instance
  • Go inside the directory and run jenkins.exe install

This will register the freshly pasted Jenkins as a service on the new machine and will work 100% the same.

If this works then if you need a backup just for future safety, copy the Jenkins folder somewhere. It will work like a snapshot.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.