blob: e9ecfedca9d65d2808b23cb244d7618ba333fe48 [file] [log] [blame] [view]
Slack Integration Plugin
========================
A simple Gerrit plugin that allows the publishing of certain Gerrit events
to a configured Slack Webhook URL. The plugin uses Gerrit's inherited project
configuration support so common config options can be set at a higher level
and shared by many projects along with project specific config options.
Development
-----------
To build the plugin,
[JDK 1.8](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)
and [Bazel](https://bazel.build/) are required.
Once installed use _bazel_ to build.
cd ./slack-integration
bazel build slack-integration
Once packaged, you can install the _./bazel-bin/slack-integration.jar_ file into
Gerrit.
Installation
------------
Installing the Slack Integration Plugin is as simple as copying the resulting
JAR file into the Gerrit plugins directory. Assuming you installation of Gerrit
is located at _/usr/local/gerrit_ you simply execute the following.
cp ./slack-integration.jar /usr/local/gerrit/plugins
Simple substitute the path to your Gerrit plugins directory as needed. Gerrit
automatically loads new plugins and unloads old plugins, no restart is
required.
Configuration
-------------
The first thing you need to do is setup an incoming webhook integration in
Slack. This is done via my.slack.com - Configure Integrations.
Configuration of the Slack Integration Plugin is done in Gerrit via a project
specific config file. This configuration is stored in the project’s
_project.config_ file on the _refs/meta/config_ branch of the project.
Common configuration options that can be shared between multiple projects
can be placed in the _All-Projects_ config branch, or another project that
serves as an inherited base. Config options can then be overridden in the
actual project's config branch. For example, you may want to specify a default
webhook URL, username and channel then override the channel to be specific
to each project.
Editing a project's config
mkdir <project>-config
cd <project>-config
git init
git remote add origin ssh://<admin-user>@<gerrit-host>:29418/<project>
git fetch origin refs/meta/config:refs/remotes/origin/meta/config
git checkout meta/config
Create the following config block
vi project.config
[plugin "slack-integration"]
enabled = true
webhookurl = https://<web-hook-url>
channel = general
username = gerrit
ignore = "^WIP.*"
Commit and push changes
git commit -a
git push origin meta/config:meta/config
Configuration Options
---------------------
The following configuration options are available
enabled – boolean (true/false)
When true, enables Slack integration (defaults to false).
webhookurl - String
The Slack webhook URL to publish to (defaults to an
empty string).
channel - String
The Slack channel to publish to (defaults to "general").
username - String
The Slack username to publish as (defaults to "gerrit").
ignore - Pattern
A "dotall" enabled regular expression pattern that, when matches
against a commit message, will prevent the publishing of patchset
created event messages (defaults to an empty string).
ignore-unchanged-patch-set - boolean (true/false)
Whether a Slack notification about a new patch-set shouldn't be
published when code didn't change (defaults to true).
ignore-wip-patch-set - boolean (true/false)
Whether any Slack notifications regarding a work-in-progress change
shouldn't be published (defaults to true).
ignore-private-patch-set - boolean (true/false)
Whether any Slack notifications regarding a private change shouldn't
be published (defaults to true).
ignore-comment-author - Pattern
A "dotall" enabled regular expression pattern that, when matches
against the comment author username, will prevent the publishing
of comment added event messages (defaults to an empty string).
publish-on-patch-set-created - boolean (true/false)
Whether a Slack notification should be published when a new patch set
is created.
publish-on-change-merged - boolean (true/false)
Whether a Slack notification should be published when a change is
merged.
publish-on-comment-added - boolean (true/false)
Whether a Slack notification should be published when a comment is
added to a review.
publish-on-reviewer-added - boolean (true/false)
Whether a Slack notification should be published when a reviewer is
added to a review.
publish-on-wip-ready - boolean(true/false)
Whether a Slack notification should be published when a
work-in-progress change is marked ready (defaults to the value for
publish-on-patch-set-created).
publish-on-private-to-public - boolean(true/false)
Whether a Slack notification should be published when a
private change is changed to public (defaults to the value for
publish-on-patch-set-created).
Proxy Configuration
-------------------
If a proxy is needed to connect externally to Slack, a proxy server may
be configured via Gerrit's main configuration file. The path to this file will
vary based on where Gerrit was installed. This example assumes that Gerrit was
installed in _/usr/local/gerrit_.
Edit _/usr/local/gerrit/etc/gerrit.config_ and add the following block.
[plugin "slack-integration"]
proxy-host = <hostname or IP address of the proxy server>
proxy-port = <port of the proxy server>
Proxy Configuration Options
---------------------------
The following configuration options are available
proxy-host - String
The host of the proxy server, e.g. my.proxy.host (defaults to null).
proxy-port - int
The port of the proxy server (defaults to 8080)
proxy-username - String
The username, if needed, to authenticate to the proxy server
(defaults to null).
proxy-password - String
The password, if needed, for the specified username to authenticate to
the proxy server, (defaults to null).