Jenkins : Developing with JRebel

This pages discusses development of Jenkins core and plugins with JRebel to enhance the development experience.

You can get your free license for non-commercial use here: https://my.jrebel.com.

Runnning Maven with JRebel

To interactively test Jenkins plugins during development with JRebel, start Maven like this:

$ export MAVEN_OPTS="-javaagent:/path/to/jrebel.jar -XX:MaxPermSize=128m"
$ mvn hpi:run

Similarly, for Jenkins core, start Maven like this:

$ export MAVEN_OPTS="-javaagent:/path/to/jrebel.jar -XX:MaxPermSize=128m"
$ mvn hudson-dev:run

jrebel.xml is not required to make this work.

What can be reloaded?

Newer versions of Jenkins have better support for JRebel

Reloadable without JRebel

  • All the view pages (Jelly, Groovy, ...)
  • Help files, images, CSS, and other web resources

Reloadable with debugger hotswap

  • Signature compatible code only changes

Reloadable with JRebel

  • Signature breaking changes to the model classes (see the feature list for what can be reloaded and what cannot)

Since Jenkins 1.421

  • HTTP binding of objects, including web-bound methods (such as doXyz), getter/field traversal (such as getXyz), and so on
  • What's exposed to the remote API

Not reloadable yet

  • Addition/removal of the extension point implementation

Other readings