How do you back up Jenkins jobs & master configs?

57

17

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

kenorb

Posted 2017-02-28T17:08:31.477

Reputation: 5 011

What did you try?030 2018-04-26T22:12:14.267

1

I tried this.

kenorb 2018-04-26T22:13:21.890

Answers

34

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

Gepser

Posted 2017-02-28T17:08:31.477

Reputation: 1 123

2I 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/jenkinsBryce Guinta 2017-09-25T18:00:39.653

2The problem with backing up the whole folder 'jobs' is that also the job executions will be copied - this may mean many GB.Mike Argyriou 2017-10-22T08:56:12.167

Whether the service of Jenkins should restart?Xin Meng 2018-05-04T15:35:03.633

Jenkins home in MacOS (Homebrew default installation): ~/.jenkinschuckSaldana 2019-04-13T14:16:31.207

31

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?

kenorb

Posted 2017-02-28T17:08:31.477

Reputation: 5 011

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 2018-04-26T22:16:11.657

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 2018-04-26T22:19:23.757

You store the passwords in git? Do you encrypt them? Do you use pipelines aka Pipeline as Code as well?030 2018-04-26T22:23:16.913

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 2018-04-26T22:24:51.750

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 2018-04-26T22:27:17.010

@030 Once I wanted to move Jenkins to another box, so I've cloned all .xml from git repo into new Jenkins folder (especially jobs), then I've hit the option in Jenkins to re-load the configs from file, and all jobs were imported fine. But it's a matter of trial and error or your goals which files you want to keep in git. Some of them are annoyingly changes too often.kenorb 2018-04-26T22:31:41.700

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.

avi

Posted 2017-02-28T17:08:31.477

Reputation: 1 117

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.

Adam Berry

Posted 2017-02-28T17:08:31.477

Reputation: 129

1I literally tar the $JENKINS_HOME folder, but this seems soooo much better.MrMesees 2017-04-14T21:18:13.090

2That plugins seems pretty inactive/dead - is it really functional and on-par as of 2017?Tuukka Mustonen 2017-10-23T09:35:06.063

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.

Bibin Wilson

Posted 2017-02-28T17:08:31.477

Reputation: 151

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

nickcheng

Posted 2017-02-28T17:08:31.477

Reputation: 131

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.

Saikat Sengupta

Posted 2017-02-28T17:08:31.477

Reputation: 131

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.

mandarin

Posted 2017-02-28T17:08:31.477

Reputation: 111