Describe plugin related features in the Gerrit 2.5 release notes
Change-Id: Ia7400f854e5b8026017da210d8c5c13d132b87a0 Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
This commit is contained in:
@@ -7,12 +7,14 @@ This page describes how plugins for Gerrit can be developed.
|
|||||||
Depending on how tightly the extension code is coupled with the Gerrit
|
Depending on how tightly the extension code is coupled with the Gerrit
|
||||||
server code, there is a distinction between `plugins` and `extensions`.
|
server code, there is a distinction between `plugins` and `extensions`.
|
||||||
|
|
||||||
|
[[plugin]]
|
||||||
A `plugin` in Gerrit is tightly coupled code that runs in the same
|
A `plugin` in Gerrit is tightly coupled code that runs in the same
|
||||||
JVM as Gerrit. It has full access to all server internals. Plugins
|
JVM as Gerrit. It has full access to all server internals. Plugins
|
||||||
are tightly coupled to a specific major.minor server version and
|
are tightly coupled to a specific major.minor server version and
|
||||||
may require source code changes to compile against a different
|
may require source code changes to compile against a different
|
||||||
server version.
|
server version.
|
||||||
|
|
||||||
|
[[extension]]
|
||||||
An `extension` in Gerrit runs inside of the same JVM as Gerrit
|
An `extension` in Gerrit runs inside of the same JVM as Gerrit
|
||||||
in the same way as a plugin, but has limited visibility to the
|
in the same way as a plugin, but has limited visibility to the
|
||||||
server's internals. The limited visibility reduces the extension's
|
server's internals. The limited visibility reduces the extension's
|
||||||
@@ -174,6 +176,7 @@ reload::
|
|||||||
To reload/restart a plugin the link:cmd-plugin-reload.html[plugin reload]
|
To reload/restart a plugin the link:cmd-plugin-reload.html[plugin reload]
|
||||||
command can be used.
|
command can be used.
|
||||||
|
|
||||||
|
[[classpath]]
|
||||||
Classpath
|
Classpath
|
||||||
---------
|
---------
|
||||||
|
|
||||||
@@ -189,6 +192,7 @@ link:http://maven.apache.org/plugins/maven-shade-plugin/[shade plugin]
|
|||||||
to package additional dependencies. Relocating (or renaming) classes
|
to package additional dependencies. Relocating (or renaming) classes
|
||||||
should not be necessary due to the ClassLoader isolation.
|
should not be necessary due to the ClassLoader isolation.
|
||||||
|
|
||||||
|
[[ssh]]
|
||||||
SSH Commands
|
SSH Commands
|
||||||
------------
|
------------
|
||||||
|
|
||||||
@@ -243,6 +247,7 @@ by PrintHello class will be available to users as:
|
|||||||
$ ssh -p 29418 review.example.com helloworld print
|
$ ssh -p 29418 review.example.com helloworld print
|
||||||
----
|
----
|
||||||
|
|
||||||
|
[[http]]
|
||||||
HTTP Servlets
|
HTTP Servlets
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
@@ -291,6 +296,7 @@ by HelloServlet class will be available to users as:
|
|||||||
$ curl http://review.example.com/plugins/helloworld/print
|
$ curl http://review.example.com/plugins/helloworld/print
|
||||||
----
|
----
|
||||||
|
|
||||||
|
[[data-directory]]
|
||||||
Data Directory
|
Data Directory
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
@@ -307,6 +313,7 @@ Plugins can use this to store any data they want.
|
|||||||
}
|
}
|
||||||
====
|
====
|
||||||
|
|
||||||
|
[[documentation]]
|
||||||
Documentation
|
Documentation
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
@@ -325,6 +332,7 @@ link:http://daringfireball.net/projects/markdown/[Markdown] style
|
|||||||
if the file name ends with `.md`. Gerrit will automatically convert
|
if the file name ends with `.md`. Gerrit will automatically convert
|
||||||
Markdown to HTML if accessed with extension `.html`.
|
Markdown to HTML if accessed with extension `.html`.
|
||||||
|
|
||||||
|
[[macros]]
|
||||||
Within the Markdown documentation files macros can be used that allow
|
Within the Markdown documentation files macros can be used that allow
|
||||||
to write documentation with reasonably accurate examples that adjust
|
to write documentation with reasonably accurate examples that adjust
|
||||||
automatically based on the installation.
|
automatically based on the installation.
|
||||||
@@ -346,6 +354,7 @@ from Markdown to HTML.
|
|||||||
Macros that start with `\` such as `\@KEEP@` will render as `@KEEP@`
|
Macros that start with `\` such as `\@KEEP@` will render as `@KEEP@`
|
||||||
even if there is an expansion for `KEEP` in the future.
|
even if there is an expansion for `KEEP` in the future.
|
||||||
|
|
||||||
|
[[auto-index]]
|
||||||
Automatic Index
|
Automatic Index
|
||||||
~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
@@ -386,6 +395,7 @@ displayed as part of the index page, if present in the manifest:
|
|||||||
|API Version | Gerrit-ApiVersion
|
|API Version | Gerrit-ApiVersion
|
||||||
|===================================================
|
|===================================================
|
||||||
|
|
||||||
|
[[deployment]]
|
||||||
Deployment
|
Deployment
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
@@ -104,6 +104,7 @@ Subprojects point to snapshot releases
|
|||||||
./tools/release.sh
|
./tools/release.sh
|
||||||
====
|
====
|
||||||
|
|
||||||
|
[[plugin-api]]
|
||||||
Publish the Plugin API JAR File
|
Publish the Plugin API JAR File
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
@@ -8,6 +8,7 @@ link:http://code.google.com/p/gerrit/downloads/detail?name=gerrit-2.5.war[http:/
|
|||||||
Upgrade Warnings
|
Upgrade Warnings
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
|
[[replication]]
|
||||||
Replication
|
Replication
|
||||||
~~~~~~~~~~~
|
~~~~~~~~~~~
|
||||||
|
|
||||||
@@ -53,3 +54,162 @@ stale the cached data can be. This is especially useful for slave
|
|||||||
servers account and permission data, or the `ldap_groups` cache, where
|
servers account and permission data, or the `ldap_groups` cache, where
|
||||||
updates are often made to the source without telling Gerrit to reload
|
updates are often made to the source without telling Gerrit to reload
|
||||||
the cache.
|
the cache.
|
||||||
|
|
||||||
|
New Features
|
||||||
|
------------
|
||||||
|
|
||||||
|
Plugins
|
||||||
|
~~~~~~~
|
||||||
|
|
||||||
|
The Gerrit server functionality can be extended by installing plugins.
|
||||||
|
Depending on how tightly the extension code is coupled with the Gerrit
|
||||||
|
server code, there is a distinction between
|
||||||
|
link:../Documentation/dev-plugins.html#plugin[plugins] and
|
||||||
|
link:../Documentation/dev-plugins.html#extension[extensions].
|
||||||
|
|
||||||
|
* link:#replication[Move replication logic to replication plugin]
|
||||||
|
+
|
||||||
|
This splits all of the replication code out of the core server
|
||||||
|
and moves it into a standard plugin.
|
||||||
|
|
||||||
|
* link:../Documentation/dev-plugins.html[Documentation about
|
||||||
|
plugin development] including instructions for:
|
||||||
|
** link:../Documentation/dev-plugins.html#getting-started[how to get
|
||||||
|
started with plugin development]
|
||||||
|
** link:../Documentation/dev-plugins.html#deployment[plugin
|
||||||
|
deployment/installation]
|
||||||
|
|
||||||
|
* link:../Documentation/dev-plugins.html#API[API for plugins and
|
||||||
|
extensions]
|
||||||
|
|
||||||
|
* Support for link:../Documentation/dev-plugins.html#ssh[SSH command
|
||||||
|
plugins]
|
||||||
|
+
|
||||||
|
Allows plugin developers to declare additional SSH commands.
|
||||||
|
|
||||||
|
* Enable aliases for SSH commands
|
||||||
|
+
|
||||||
|
Site administrators can alias SSH commands from a plugin into the
|
||||||
|
`gerrit` namespace.
|
||||||
|
+
|
||||||
|
The aliases are configured statically at server startup, but are
|
||||||
|
resolved dynamically at invocation time to the currently loaded
|
||||||
|
version of the plugin. If the plugin is not loaded, or does not
|
||||||
|
define the command, "not found" is returned to the user.
|
||||||
|
|
||||||
|
* Support for link:../Documentation/dev-plugins.html#http[HTTP
|
||||||
|
plugins]
|
||||||
|
+
|
||||||
|
Plugins may contribute to the /plugins/NAME/ URL space.
|
||||||
|
|
||||||
|
* Automatic registration of plugin bindings
|
||||||
|
+
|
||||||
|
If a plugin has no modules declared in the manifest, automatically
|
||||||
|
generate the modules for the plugin based on the class files that
|
||||||
|
appear in the plugin and the `@Export` annotations that appear on
|
||||||
|
these concrete classes.
|
||||||
|
+
|
||||||
|
For any non-abstract command that extends SshCommand, plugins may
|
||||||
|
declare the command with `@Export("name")` to
|
||||||
|
link:../Documentation/dev-plugins.html#ssh[bind the implementation
|
||||||
|
as that SSH command].
|
||||||
|
+
|
||||||
|
Likewise link:../Documentation/dev-plugins.html#http[HTTP servlets
|
||||||
|
can also be bound to URLs].
|
||||||
|
|
||||||
|
* link:../Documentation/dev-plugins.html#data-directory[Support a data
|
||||||
|
directory for plugins on demand]
|
||||||
|
|
||||||
|
* Support serving static/ and Documentation/ from plugins
|
||||||
|
+
|
||||||
|
The static/ and Documentation/ resource directories of a plugin can be
|
||||||
|
served over HTTP for any loaded and running plugin, even if it has no
|
||||||
|
other HTTP handlers. This permits a plugin to supply icons or other
|
||||||
|
graphics for the web UI, or documentation content to help users learn
|
||||||
|
how to use the plugin.
|
||||||
|
|
||||||
|
* link:../Documentation/dev-plugins.html#documentation[Auto-formatting
|
||||||
|
of plugin HTTP pages from Markdown files]
|
||||||
|
+
|
||||||
|
If Gerrit detects that a requested plugin resource does not exist, but
|
||||||
|
instead a file with a `.md` extension does exist, Gerrit opens the
|
||||||
|
`.md` file and reformats it as html.
|
||||||
|
|
||||||
|
* Support of link:../Documentation/dev-plugins.html#macros[macros in
|
||||||
|
Markdown plugin documentation]
|
||||||
|
|
||||||
|
* link:../Documentation/dev-plugins.html#auto-index[Automatic
|
||||||
|
generation of an index for the plugin documentation]
|
||||||
|
|
||||||
|
* Support for audit plugins
|
||||||
|
+
|
||||||
|
Plugins can implement an `AuditListener` to be informed about auditable
|
||||||
|
actions:
|
||||||
|
+
|
||||||
|
----
|
||||||
|
@Listener
|
||||||
|
public class MyAuditTrail extends AuditListener
|
||||||
|
----
|
||||||
|
+
|
||||||
|
The plugin must define a plugin module that binds the implementation of
|
||||||
|
the audit listener in the `configure()` method:
|
||||||
|
+
|
||||||
|
----
|
||||||
|
DynamicSet.bind(binder(), AuditListener.class).to(MyAuditTrail.class);
|
||||||
|
----
|
||||||
|
|
||||||
|
* Web UI for plugins
|
||||||
|
+
|
||||||
|
Administrators can see the list of installed plugins in the WebUI
|
||||||
|
under `Admin` > `Plugins`. For each plugin the plugin status is shown
|
||||||
|
and it is possible to navigate to the plugin documentation.
|
||||||
|
|
||||||
|
* Servlet to list plugins
|
||||||
|
+
|
||||||
|
Administrators can retrieve plugin information from a REST interface
|
||||||
|
by loading `<server-url>/a/plugins/`.
|
||||||
|
|
||||||
|
* Support SSH commands to
|
||||||
|
** link:../Documentation/cmd-plugin-ls.html[list the installed
|
||||||
|
plugins]
|
||||||
|
** link:../Documentation/cmd-plugin-install.html[install plugins]
|
||||||
|
** link:../Documentation/cmd-plugin-enable.html[enable plugins]
|
||||||
|
** link:../Documentation/cmd-plugin-remove.html[disable plugins]
|
||||||
|
** link:../Documentation/cmd-plugin-reload.html[reload plugins]
|
||||||
|
|
||||||
|
* Support installation of core plugin on site initialization
|
||||||
|
|
||||||
|
* Automatically load/unload/reload plugins
|
||||||
|
+
|
||||||
|
The PluginScanner thread runs every 1 minute by default and loads any
|
||||||
|
newly created plugins, unloads any deleted plugins, and reloads any
|
||||||
|
plugins that have been modified.
|
||||||
|
+
|
||||||
|
The check frequency can be configured by setting
|
||||||
|
link:../Documentation/config-gerrit.html#plugins.checkFrequency[
|
||||||
|
plugins.checkFrequency] in the Gerrit config file. By configuration
|
||||||
|
the scanner can also be disabled.
|
||||||
|
|
||||||
|
* link:../Documentation/dev-plugins.html#classpath[Loading of plugins
|
||||||
|
in own ClassLoader]
|
||||||
|
|
||||||
|
* Plugin cleanup in the background
|
||||||
|
+
|
||||||
|
When a plugin is stopped, schedule a Plugin Cleaner task to run
|
||||||
|
1 minute later to try and clean out the garbage and release the
|
||||||
|
JAR from `$site_path/tmp`.
|
||||||
|
|
||||||
|
* Export `LifecycleListener` as extension point
|
||||||
|
+
|
||||||
|
Extensions may need to know when they are starting or stopping.
|
||||||
|
Export the interface that they can use to learn this information.
|
||||||
|
|
||||||
|
* Support injection of `ServerInformation` into extensions and plugins
|
||||||
|
+
|
||||||
|
Plugins can take this value by injection and learn the current
|
||||||
|
server state during their own LifecycleListener. This enables a
|
||||||
|
plugin to determine if it is loading as part of server startup, or
|
||||||
|
because it was dynamically installed or reloaded by an administrator.
|
||||||
|
|
||||||
|
* link:../Documentation/dev-plugins.html#getting-started[Maven
|
||||||
|
archetype for creating gerrit plugin projects]
|
||||||
|
Reference in New Issue
Block a user