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

Plugin Information

View Build-Publisher 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:

What does it do?

 This plugin allows records from one Jenkins to be published on another Jenkins.The typical use case is for you to run builds within the firewall, then send the results to another Jenkins which is facing the outside world.

How it works?

For the convention, let's call the Jenkins that's doing builds private Jenkins, and let's call the Jenkins that's just broadcasting build results as public Jenkins. The following pieces are involved to make this work:

  • Both private and public Jenkins need to have the build-publisher plugin installed. This plugin makes Jenkins capable of sending records to public Jenkins.
  • Private Jenkins is configured with information about public Jenkins instance(s) that it wants to send data to.
  • Jobs on private Jenkins need to opt-in to the publication (through the job configuration.)

Once this is set up, build records from private Jenkins is sent to public Jenkins, through HTTP. If a corresponding job does not exist, it will be automatically created on the public Jenkins and kept in sync with the private Jenkins.

For this arrangement to work correctly, two Jenkins need to have more or less the same version of plugins.

Configuration and usage

Public Jenkins instance is configured on the global configuration page. You have to specify name, URL, administrator username and password, as shown on the following screenshot.

Check "Publish build" on the job configuration page int the "Post-build Actions" section to mark the project for publishing:

To check the status of publishing go to "Dashboard" -> "Manage Jenkins" -> "Build publishing status". In case of any problem during build transmission, you can restart the publishing thread or reschedule interrupted transmission (otherwise the thread waits for 10 minutes and tries again).


Proxy support is available since ver. 1.12. Proxy settings is loaded from Update center setup. If you do any changed to proxy setup, you need to reload proxy setup in Build publisher section global Jenkins configuration page in order to Build publisher reflect the changes (or restart Jenkins:-).

Missing features and known bugs

  • Views don't get synchronized automatically
  • The plugin isn't able to deal with matrix projects whose configurations (axis) have changed (I had problems reproducing this lately)

Change Log

Upcoming changes
Version 1.22 (2017/10/23)
Version 1.20 (2015/01/28)
Version 1.19 (2014/05/10)
Version 1.18 (2014/04/09)
  • BuildPublisher reports "URL doesn't exist" after upgrade Remote Jenkins to 1.535 (JENKINS-20067)
Version 1.17 (2013/05/14)
Version 1.16 (2013/04/30)
  • Create matrix sub-job if doesn't exists (pull #2)
  • Proper encoding of URLs of jobs (pull #3)
Version 1.15 (2013/02/28)
  • Update for changes required by Jenkins core 1.503 (JENKINS-16993)
Version 1.14 (2013/02/26)
  • Handle error states when job was already deleted or matrix configuration doesn't exists yet (pull #2)
  • Proper URL encoding (pull #1)
Version 1.13 (2012/09/05)
  • Update for changes required by Jenkins core 1.463 (JENKINS-13857)
  • Close output stream if some exception happens
Version 1.12 (2012/03/28)
Version 1.11 (2011/09/21)
Version 1.10 (2010/09/08)
  • Fix for JENKINS-7330
Version 1.9 (2010/08/05)
  • Added option to disable triggers on public Hudson (JENKINS-3802)
Version 1.8 (2009/12/28)
  • Fix link to matrix configuration
  • Update uses of deprecated APIs


  1. Unknown User (mmorizot)


    The Build is also launched on "public hudson server" : is there a way of preventing the build to also be triggered on the "publication server" ?

    I have a build that is done on "hudson server A" and publishes the build to "public server B" . Unfortunatly, once published, Server B also trioes to launch a build on it's own. How do i stop that?


    1. Unknown User (dvrzalik)

    2. Unknown User (krwalker)

      I set up two jobs; one as a trigger, one as a worker. The trigger has the worker listed as a downstream project. I only publish the worker.

  2. Unknown User (anuj.shah@detica.com)


    I am using the Plot Plugin and the csv plot files are not published with the build.

  3. Unknown User (ragesh_nair)

    Is there a way to publish to multiple public hudson using this plug-in in a single job?? We can configure multiple public hudson in the plugin configuration but cant select multiple public hudsons in job configuration. Any tips, highly appreciated.

    Hudson Team, Sonyericsson

  4. Unknown User (gavin.davies@boxuk.com)

    Thanks for a really useful plugin!

    I have just one issue with it. Our build server launches a build on another Hudson server, which then publishes the build back to the master. The build appears on the master server, and it still shows the "build" button. It would be great if the build button were hidden for builds which have been published from another server as this is potentially confusing.


    - Gav

  5. Unknown User (micho2001)

    Congrats on a very useful plugin. We are using it a lot!  Unfortunately we are not able to use it when a slave is behind a proxy/firewall. While I'm at it adding NTLM support would also be great!

    I'm sure many people working on corporate environments will have this kind of issues. Could you recommend a work around?


  6. Unknown User (jbrejner)

    Great Plugin.

    We would like to have different "Discard old build" settings on internal versus public master.

    With the plugin enabled each build is sent across to public, but we would like to keep a longer history on public. For instance we would select to keep 3 days of builds on internal, but 30 days on public. We think that is the intension behind the  advanced settngs on "Publish build" post build step on the internal's job configuration.Can you confirm that is the intention for the dialog ?

    Unfortunately we can not test due to issue JENKINS-13857.

  7. Unknown User (tao_tommy)

    I have two jenkins instances in intranet, the jobs are synced after publich.

    But why can't I find the result on the 2nd jenkins? Must it be public jenkins?

  8. Unknown User (btruji)

    I am trying to avoid having to supply a administrative password and would rather have a limited access user account that the publisher uses. Is there anyway to used the matrix based security to apply limited permissions to a user specific to the publisher and have the master use that instead of administrator? 


  9. Unknown User (jamesco)

    Trying to set up publishing from a slave to master.

    Plain HTTP auth used on slave.  

    From slave command-line 'curl -vv -u user:pass http://master:port' works okay.

    Getting ERROR: http://master:port/ is not Hudson (Forbidden)

    jenkins master is 2.7.4, jenkins slave is 2.32.1 -  could that be a problem ?  

    What does this error mean and how can it be solved?

    Build publishing


    Public Hudson server











    http://master:port/ is not Hudson (Forbidden)


    1. Unknown User (jamesco)

      I see that the Authorization: header is not sent in the build publisher GET request. 

      The response is HTTP/1.1 403 Forbidden. Not 401 unauthorized.

  10. Unknown User (rocha_stratovan)

    Is it possible to have jobs triggered on the public side once something has successfully published?

    For example

    Private server uses job-publish-foo to build and then publishes it to Public

    Public syncs from Private, it updates it's own job-publish-foo to match Private's job-publish-foo. Now trigger another job, job-pub-2 on the Public server to do something else with the artifacts found in the just published foo

    I've tried creating a job-pub-2 that triggers when job-publish-foo finishes. But it appears the jobs doesn't ACTUALLY run on the Public server, it's just synchronized with the Private Server.

    What am I missing?