Due to some maintenance issues, this service has been switched in read-only mode, you can find more information about the why

and how to migrate your plugin documentation in this blogpost

Skip to end of metadata
Go to start of metadata
Saves copies of all job and system configurations.

Plugin Information

View Job Configuration History on the plugin site for more information.

Older versions of this plugin may not be safe to use. Please review the following warnings before using an older version:

This plugin saves a copy of the configuration file of jobs and agents (config.xml) for every change made and of the system configuration (<config-name>.xml).
You can also see what changes have been made by which user if you configured a security policy.

It is also possible to get a side-by-side view of the differences between two configurations and to restore an old version of a job's configuration. (The latter is only available for jobs, not for system changes.)
However, if you restore an older version of the config file and the new version contains fields that were not present in the older version, the restored version will still contain these fields, although they were not present in the original.

The plugin also provides an overview page of all changes. You can find it under <jenkins_url>/jobConfigHistory or reach it via links in the sidepanel of the main and the system configuration pages.
The overview page initially only lists system configuration changes (for performance reasons), but there are links to view either all job configuration histories or just the deleted jobs or all kinds of configuration history entries together (which may take some time to load, depending on the number of jobs in your instance).


Job Config History Revision Overview

Job Diff Side-By-Side View

Config Overview Page

Interdependencies with other Plugins/ Excluding config path parts (jobs, folders, ...)

If you use other plugins, that are (automatically) changing the configuration, you might end up with a lot of unwanted change detections.

It's recommended to use the given ability, to exclude such changes by patterns. This can be done in the System Configuration or via <jenkins-link>/configure. Just add the corresponding pattern (e.g. cluster-stats) in the Input Configuration exclude file pattern:

This functionality also allows you to exclude jobs, folders or other parts of your job hierarchy:
The pattern is attempted to be found in a config file's file path. Adding "|test" to the pattern will also cause "testFolder/jobs/job1" to be excluded.
So if you want to exclude jobs, only, it might be better to enter something like "|testJob/config\.xml".

If you use this plugin together with the Global Build Stats Plugin you should add global-build-stats to the excludes in the Configuration exclude file pattern section of this plugin in Configure System page. Fixed in version 1.9 of the plugin.

Open issues

Key Summary T Created Updated Due Assignee Reporter P Status Resolution


Version 2.24 (September 9 2019)

Version 2.23.1 (August 6 2019)

  • (PR #97) Bugfix: System configs were not persisted (regression of 8e2d9dd)

Version 2.23 (July 23 2019)

Version 2.22 (June 3 2019)

Version 2.21 (May 2 2019)

Version 2.20 (April 5 2019)

Version 2.19 (December 5 2018)

  • (JENKINS-53998) Job Config History plugin should not call User.current() during startup
  • (PR #72) Use canonical user identify in case change initiator is unknown
  • (PR #67) Fix root URL
  • Findbugs fixes
  • Minor changes (Jenkinsfile, Link fixes)

Version 2.18.3 (October 25 2018)

Version 2.18.2 (September 28 2018)

Version 2.18.1 (September 25 2018)

Version 2.18 (September 25 2017)

  • (JENKINS-47089) Wiki page for JobConfigHistory has circular link
  • (PR #65) Also exclude files from the lockable resources plugin

Version 2.17 (August 22 2017)

Version 2.16 (April 21 2017)

  • (JENKINS-42464) Job Configuration History not accessible from public IP address
  • Switched unit tests from HudsonTestCase to JenkinsRule.

Version 2.15 (July 21 2016)

  • (JENKINS-34802) Exclude history collection for selected users (Note: All changes will be assigned to the next, not excluded user!)

Version 2.14 (May 09 2016)

  • (JENKINS-33641) Showing old and new job name if hovering over info image beneath operation renamed (for jobs and nodes)
  • (JENKINS-25654) Fixed: Restore Project option for Job Config History gets Oops! page
  • Merged pull request #49 (thanks to Brandon Koepke)
  • (JENKINS-34151) Add support for Pipeline projects to display config changes in build history
  • (JENKINS-30578) Error when trying to view job config history

Version 2.13 (March 18 2016)

  • (JENKINS-33289) NPE when clicking showDiffs (Jenkins Core 1.650 or higher)
  • SECURITY-140 XSS vulnerability

Version 2.12 (July 23 2015)

  • (JENKINS-29063) Switch default for per-Maven modules to false (Thanks to Andrew Bayer)
  • (JENKINS-24930) Alternating row bg colors (Thanks to Daniel Beck)

Version 2.11 (April 17 2015)

  • Avoid calling User.current() during Jenkins initialization (Thanks to Thomas de Grenier de Latour)
  • Avoid tracking changes for cloud slave as well (Thanks to Ryan Campbel)

Version 2.10 (November 12 2014)

  • Fix proposal for NPE in ComputerHistoryListener.onConfigurationChange method (Thanks to William Bernardet)
  • (JENKINS-22639) Don't record changes to AbstractCloudSlaves or Ephemeral Nodes (Thanks to Ryan Campbell and Jesse Click)

Version 2.9 (September 02 2014)

  • Fixed: Do not save config for matrix configurations (JENKINS-24412) (Thanks to Oliver Gondža)
  • Fixed: Job config change not saved for maven and matrix projects (JENKINS-24410) (Thanks to Oliver Gondža)

Version 2.8 (July 17 2014)

  • Default for global configuration "saveModuleConfiguration" changed to false
  • Fixed history could not saved for some job types if in the system configuration "Save folder configuration changes" wasn't set (Thanks to Jesse Glick)
  • Rely on Jenkins 1.548+ so we can use TransientActionFactory (Thanks to Jesse Glick)
  • Added Rest Api (JENKINS-22796) (JENKINS-22895) (JENKINS-22937) (Thanks to cfs pure))
  • Fixed Building plugin in Windows environment (Testing only) (Thanks to Oleg Nenashev)
  • Fixed wrong user link in diff page
  • Fixed: Suppress the targetType loading issue (JENKINS-20511) (Thanks to Oleg Nenashev)

Version 2.7 (Release failed)

Version 2.6 (Apr 14 2014)

  • Diff view: easily review changes sequentially (Next/Previous links) (JENKINS-21411)
  • Show Config Versions in Diff View (JENKINS-21406)
  • Add config history for slaves too (Thanks to Lucie Votypkova)
  • Folder integration (JENKINS-20990) (Thanks to Jesse Glick)

Version 2.5 (Oct 31 2013)

  • Add button for restoring deleted projects
  • Add view that only contains 'Created' entries
  • Change purging (by quantity as well as by age) so that 'Created' entries of a project are not deleted
  • Fix links so that last existing config file of a deleted job is shown (instead of an error)
  • Always save system changes. (Remove configuration option for it.)
  • Fix for 'Change History consumes extreme amounts of CPU' (JENKINS-17124) (Thanks to Stephan Pauxberger)
  • Lazy loading bug fixed. (Thanks to Jesse Glick)

Version 2.4 (Apr 25 2013)

Version 2.3 (Feb 25 2013)

  • Add option to automatically delete configuration histories based on their age (Feature request JENKINS-12233).
  • Fix bug that throws NPE when building a new project (JENKINS-16496).
  • Set "skip duplicate history" enabled by default (JENKINS-14303).

Version 2.2 (Jan 30 2013)

  • Catch NPE which appears when copying recently created job (Workaround for JENKINS-16499).

Version 2.1.1 (Jan 22 2013)

  • Fix bug that prevents building a job which has no config history entries.

Version 2.1 (Jan 18 2013)

  • Add badges which appear in the build history when the configuration of the respective job has changed since it was build the last time.
  • Change the URL parameters so that not entire paths but just timestamps and job/system configuration names are passed (Fix for JENKINS-16375).

Version 2.0 (Nov 19 2012)

  • Save and list config info for deleted jobs (Fix for JENKINS-13069)
  • Add button for restoring a previous job configuration (Fix for JENKINS-9616)
  • Improve loading time of global jobConfigHistory page
  • Change access control so that system changes can only be viewed by users with system configure permission
  • Add support for hierachical job model (ItemGroup) (Thanks to ndeloof)


    With this version the plugin changes the location where the configuration history data is stored. This means that some data might not be found by the plugin any longer and has to be moved manually. See above for more information.

With the 1.x versions of this plugin, the job configuration history data used to be stored with each job (JENKINS_HOME/jobs/JOBNAME/config-history), whereas the system configuration history was stored in an extra directory under JENKINS_HOME. As of version 2.0, both types of configuration history data are now to be found in one directory under JENKINS_HOME. The default location for this folder is JENKINS_HOME/config-history.
Now there are two possible scenarios:
If you did not use the default root history directory of the 1.x version, but set it to an individual path on the Jenkins configuration page, the 2.x versions of the plugin should still be able to find and display the data correctly.
However, if you did not change the path and used the default root history directory, your job configuration data is stored with each job, where the 2.x versions of the plugin will not find it any longer. If you want the plugin to list the job configuration history again, you have to move the data manually from JENKINS_HOME/jobs/JOBNAME/config-history to JENKINS_HOME/config-history/jobs/JOBNAME.
This can be done with a script like the following:

#!/bin/bash -e


cd "$src"
# Make sure we support jobs containing space in names
dirs=( * )
for f in "${dirs[@]}"
        mv "$f/config-history" "$target/$f" || true

Version 1.13 (Jan 31 2012)

Version 1.12 (Nov 18 2011)

Version 1.11 (May 08 2011)

  • pom.xml now references correct github repository.

Version 1.10 (May 08 2011)

  • Include japanese translation provided by tyuki39.
  • Update to maven3 and newest plugin parent (1.409)
  • Fix for JENKINS-9617: Include an easy way to see the last diff.

Version 1.9 (Dec 20 2010)

  • Workaround for JENKINS-6774, JENKINS-6943 provided by John Borghi: http 500 error thrown whilst saving a job configuration although the changes are actually persisted, Save config results in IOException: Unable to delete....config.xml when "Do not save duplicate history" is selected, mostly a Windows/NFS problem.
  • Fix for JENKINS-6924: Add global-build-stats to DEFAULT_EXCLUDE in JobConfigHistoryConsts.java.
  • Added Spanish translation (release #33152)

Version 1.5 (May 31 2010)

  • Fix for JENKINS-6655: JDK 1.5 compatibility. (Thanks to vlatombe)
  • Bugfix in exception handling

Version 1.4 (May 11 2010)

  • Fix for JENKINS-5864: Plugin requires admin rights.
  • Provide the following additional features.  The configurations are optional and can be set via the "Manage Hudson"->"Configure System" link. (Many thanks to John Borghi and his team for this enhancement)
    •  Alternative root folder for storing history. This option must be used if interested in preserving configurations for deleted jobs.
    •  Setting for the maximum number of history configurations to keep (per item).  Leave blank or zero to keep all entries (no maximum).
    •  Option to not create a new history entry if it is the same as the last saved entry for that item.
    •  Allow saving of 'system' configurations - defined as those stored directly in HUDSON_ROOT.
    •  Regexp pattern for excluding system configuration files to save. Useful because some system configurations are not interesting to save. A recommended default value is provided.
    •  Enhanced UI for selecting versions to compare.
    •  Allow system configuration diffs to be viewed via the UI.

Version 1.3 (Apr 05 2010)

  • Fix for JENKINS-6163: Job Config History badge is lost with newer versions of hudson.

Version 1.2 (Feb 12 2010)

  • Replaced the homegrown version of diff with gnu unified diff.
  • Fix for JENKINS-5534: Access permissions are not taken into account when getting files via jobConfigHistory.
  • Fix for JENKINS-5607: table entry for username was empty.

Version 1.1 (Feb 01 2010)


  1. Unknown User (fcamblor)

    Hi !

    I'm the global-build-stats plugin maintainer : where is the problem with the job config history plugin ?
    (looks like you're handling save() method on every model ?)

    Could I help in something ?
    If this is the case, don't hesitate (smile)


  2. Unknown User (josesa)

    It could be useful if there was a way to restore one of the existing configs in the history.

    1. Unknown User (garethbowles)

      It's pretty easy to do this via the Jenkins API:

      1. Get the XML for the old version
      2. View the job configuration in Jenkins and append "/api" to the URL
      3. The resulting page will give you a URL where you can POST the old version of the config to update it back to that version.
  3. Unknown User (jacob_robertson)

    Does the latest version really depend on 1.439? We are planning on upgrading to LTS 1.424.1, but will not get to 1.439 for a while.

  4. Unknown User (shaheer)


    I am using the plugin version 2.4 with Jenkins version 1.523. The issue I am facing is, Config History of some jobs are automatically getting cleaned up. Is there any settings in Jenkins that affects config history?

    Any one has any idea about whats going on?



    1. Unknown User (stefanbrausch)

      In the system configuration you can set "Max number of history entries to keep" and "Max number of days to keep history entries".

      Maybe you have set one of this?

      1. Unknown User (shaheer)

        Thanks a lot Stefan! I had set these options. Will work on it.

  5. Unknown User (manu)

    Hi All,

    I have upgraded the jenkins from version 1.491 to ver 1.523 later i am not able to change the configuration of any existing jobs, it will stay at the same page showing in gray as LOADING... even when i try to save the configration it is giving the error.

    Status Code: 400

    Exception: This page expects a form submission

    Generated by Winstone Servlet Engine v0.9.10 at Mon Sep 02 07:50:08 EDT 2013

    Please shed some light and let me know how to fix it.



  6. Unknown User (ioannis)

    I'm trying to use this plugin as a way of querying a Jenkins project configuration. This functionality is missing from the primary Jenkins remote API and this plugin would be very useful in filling the gap.

    The current plugin supports querying a particular job configuration with a URL similar to the one below


    This URL call indeed displays the job configuration, but I would like to make the following suggestion for an imrpovement.

    1. Can we have a similar call where omitting the timesatmp parameter returns the currently active job configuration?
      1. For example: http://yourserver.url:8080/jobConfigHistory/configOutput?type=raw&isJob=true&name=Your_Job&nbsp;would return the Your_Job active configuration

    Eventually what I would like to do is create a BIRT job configuration report based on this XML (using an XML datasource)

    best regards

    1. Unknown User (kstutz)

      Hi Ioannis,

      something like that already exists:


      Is that what you are looking for or did I get you wrong?



  7. Unknown User (davida2009)

    Hi, I want this plugin to not save config history for certain jobs. Can I just add a regex, that matches those job names, to field 'System configuration exclude file pattern' in the System Config page?  

    My guess is that that does not work for job names. Is there another way of doing this?

    Best regards, David

    1. Unknown User (stefanbrausch)

      Hi David,

      sorry, but it isn't possible to remove a single job from the config history. The regex it's only for parts of the system logs.



  8. Unknown User (muthaiah_palaniappan)


    I want this plugin to prompt for a commit message, when we do changes to the configuration files, In the multiple version list UI, i would like to see the commit message for all the versions. So, that we can able to realize why we made this changes, even if we are looking the previous version after a while (say an year or so)

    1. Unknown User (stefanbrausch)

      Thanks for your request.

      This is still an open issue in the backlog: https://issues.jenkins-ci.org/browse/JENKINS-18699

  9. Unknown User (annetheagile)

    FYI, this plugin works quite acceptably in the case that a job is renamed. The status shows 'Renamed', though the exact names before/after do  not seem to show up. Many other plugins cannot handle job renames, so this is a big plus. Thank you so much to the developers, this is very useful.

    1. Unknown User (stefanbrausch)

      Hi Anne,

      thanks for your feedback.

      I opnened a issue for this enhancement: https://issues.jenkins-ci.org/browse/JENKINS-33641

  10. Unknown User (maslen)

    The first sentence of the plugin information on this page ends with "... for every change made and of the system configuration (not activated by default)".  I think that the "(not activated by default)" is out of date (since 2.5?) and could just be deleted now?

    1. Unknown User (stefanbrausch)

      Yes, you are right. It's deleted now. 

      Thanks for your feedback.

  11. Unknown User (lonndoggie)

    I was looking at a recent change in a job's config, based on the change icon in the build list.  Looking at it, it was all automatic changes due to plugins being updated. However, the user it tagged as having "made" the changes (a) didn't do that, and (b) doesn't have permission to do that.

    For (semi) automated changes like that, does it just pick a random user?  Obviously, some user updated the plugins, but perhaps that information isn't properly recorded?

    1. Unknown User (jochenafuerbacher)

      JobConfigHistory does not pick a random user. If JobConfigHistory cannot determin which user made the change, JobConfigHistory will set "anonymous" as the user who made the change. Is this your case? There are two JIRA tickets covering this issue right now: JENKINS-46873 and JENKINS-36605

      If this is not your case, feel free to open a JIRA ticket for this issue.

      1. Unknown User (lonndoggie)

        I suppose I should have said that the user that JobConfigHistory attributed the change to, and who does not have access to update plugins, and who said he did not update plugins, is not named "anonymous".

        I'll open a JIRA ticket.  Thanks.

      2. Unknown User (lonndoggie)

        I created a ticket, JENKINS-46887.  But this may be the same problem: JENKINS-19814