blob: d97e92920458f9de57af0330429304ef619a5230 [file] [log] [blame] [view] [edit]
# Gerrit high-availability setup example
This Docker Compose project contains a simple test environment
of two Gerrit masters in HA configuration.
## How to build
The project can be built using docker-compose.
To build the Docker VMs:
```
$ docker-compose build
```
### Building the Docker VMs using a non-default user id
```
$ export GERRIT_UID=$(id -u)
$ docker-compose build --build-arg GERRIT_UID
```
Above, exporting that UID is optional and will be 1000 by default.
Build the gerrit images this way only if the user with id 1000 on your
host is not owned by you. For example, some corporate environments use a
restricted 1000 user (id). In that case, the containerized application
may fail to write towards the host (through volumes).
That UID will be the one set for the containerized gerrit user. Latter's
group will remain as default (1000). This is because groups known from
the host need to be redefined for containers. Setting that user's group
in the container is not necessary for writing anyway, as opposed to its
user id. The individual gerrit user's writing permission does suffice.
## How to run
Use the 'up' target to startup the Docker Compose VMs.
```
$ docker-compose up
```
## How to test
Consider the
[instructions](https://gerrit-review.googlesource.com/Documentation/dev-e2e-tests.html)
on how to use Gerrit core's Gatling framework, to run non-core test
scenarios such as this plugin one below:
```
$ sbt "gatling:testOnly com.ericsson.gerrit.plugins.highavailability.scenarios.CloneUsingHAGerrit2"
```
This is a scenario that can serve as an example for how to start
testing an HA Gerrit system. That scenario tries to clone a project
created on gerrit 1 (port 8081) but from gerrit 2 (on 8082). The
scenario therefore expects Gerrit HA to have properly synchronized
the new project from 1 to 2. That project gets deleted after, here
using HA Gerrit straight (no specific port).
Scenario scala source files and their companion json resource ones are
stored under the usual src/test directories. That structure follows the
scala package one from the scenario classes. The core framework expects
such a directory structure for both the scala and resources (json data)
files.
## How to stop
Simply type CTRL+C on the window that started the environment
and all the VMs will stop. Their state will be persisted and the next
run will continue with the same data.
## How to clean
If you want to stop and cleanup all the previous state, use the 'down'
target.
```
$ docker-compose down
```