Add multi-site plugin to dockerised environment
Current components setup:
- 2 gerrit instances
- replication plugin
- multi-site plugin
Still need to add and configure:
- haproxy
- healthcheck
Feature: Issue 10551
Change-Id: I6d7508ed316d5029d9bbd5ff4e07ea23d6812928
diff --git a/dockerised_local_env/.gitignore b/dockerised_local_env/.gitignore
index c65f4d5..8579ca3 100644
--- a/dockerised_local_env/.gitignore
+++ b/dockerised_local_env/.gitignore
@@ -7,6 +7,8 @@
gerrit-1/bin
gerrit-1/etc
gerrit-1/tmp
+gerrit-1/lib
+gerrit-1/ssh/known_hosts
gerrit-2/plugins
gerrit-2/db
gerrit-2/git
@@ -16,3 +18,5 @@
gerrit-2/bin
gerrit-2/etc
gerrit-2/tmp
+gerrit-2/lib
+gerrit-2/ssh/known_hosts
diff --git a/dockerised_local_env/Makefile b/dockerised_local_env/Makefile
index ae1c85b..0b6b7e3 100644
--- a/dockerised_local_env/Makefile
+++ b/dockerised_local_env/Makefile
@@ -1,9 +1,9 @@
GERRIT_JOB=Gerrit-bazel-stable-2.16
-BUILD_NUM=259
-GERRIT_1_PLUGINS_DIRECTORY=./gerrit-1/plugins
-GERRIT_2_PLUGINS_DIRECTORY=./gerrit-2/plugins
+BUILD_NUM=377
GERRIT_1_BIN_DIRECTORY=./gerrit-1/bin
GERRIT_2_BIN_DIRECTORY=./gerrit-2/bin
+GERRIT_1_LIB_DIRECTORY=./gerrit-1/lib
+GERRIT_2_LIB_DIRECTORY=./gerrit-2/lib
GERRIT_1_ETC_DIRECTORY=./gerrit-1/etc
GERRIT_2_ETC_DIRECTORY=./gerrit-2/etc
GERRIT_1_PLUGINS_DIRECTORY=./gerrit-1/plugins
@@ -16,7 +16,7 @@
all: prepare download build
prepare:
- -mkdir -p $(GERRIT_1_PLUGINS_DIRECTORY) $(GERRIT_2_PLUGINS_DIRECTORY) $(GERRIT_1_BIN_DIRECTORY) $(GERRIT_2_BIN_DIRECTORY) $(GERRIT_1_ETC_DIRECTORY) $(GERRIT_2_ETC_DIRECTORY)
+ -mkdir -p $(GERRIT_1_PLUGINS_DIRECTORY) $(GERRIT_2_PLUGINS_DIRECTORY) $(GERRIT_1_BIN_DIRECTORY) $(GERRIT_2_BIN_DIRECTORY) $(GERRIT_1_ETC_DIRECTORY) $(GERRIT_2_ETC_DIRECTORY) $(GERRIT_1_LIB_DIRECTORY) $(GERRIT_2_LIB_DIRECTORY)
download: gerrit plugin_websession_flatfile \
plugin_healthcheck \
@@ -26,19 +26,19 @@
gerrit: prepare
$(WGET) $(CI_URL)/$(GERRIT_JOB)/lastSuccessfulBuild/artifact/gerrit/bazel-bin/release.war -P $(GERRIT_1_BIN_DIRECTORY)
cp $(GERRIT_1_BIN_DIRECTORY)/*.war $(GERRIT_2_BIN_DIRECTORY)
- for plugin in $(CORE_PLUGINS); do $(WGET) $(CI_URL)/$(GERRIT_JOB)/lastSuccessfulBuild/artifact/gerrit/bazel-genfiles/plugins/$$plugin/$$plugin.jar -P $(GERRIT_1_PLUGINS_DIRECTORY); done
+ for plugin in $(CORE_PLUGINS); do $(WGET) $(CI_URL)/$(GERRIT_JOB)/lastSuccessfulBuild/artifact/gerrit/bazel-bin/plugins/$$plugin/$$plugin.jar -P $(GERRIT_1_PLUGINS_DIRECTORY); done
cp $(GERRIT_1_PLUGINS_DIRECTORY)/*.jar $(GERRIT_2_PLUGINS_DIRECTORY)
plugin_websession_flatfile: prepare
- $(WGET) $(CI_URL)/plugin-websession-flatfile-bazel-master-stable-2.16/lastSuccessfulBuild/artifact/bazel-genfiles/plugins/websession-flatfile/websession-flatfile.jar -P $(GERRIT_1_PLUGINS_DIRECTORY)
+ $(WGET) $(CI_URL)/plugin-websession-flatfile-bazel-master-stable-2.16/lastSuccessfulBuild/artifact/bazel-bin/plugins/websession-flatfile/websession-flatfile.jar -P $(GERRIT_1_PLUGINS_DIRECTORY)
cp $(GERRIT_1_PLUGINS_DIRECTORY)/websession-flatfile.jar $(GERRIT_2_PLUGINS_DIRECTORY)/websession-flatfile.jar
plugin_multi_site: prepare
- $(WGET) $(CI_URL)/plugin-multi-site-bazel-stable-2.16/lastSuccessfulBuild/artifact/bazel-genfiles/plugins/multi-site/multi-site.jar -P $(GERRIT_1_PLUGINS_DIRECTORY)
- cp $(GERRIT_1_PLUGINS_DIRECTORY)/multi-site.jar $(GERRIT_2_PLUGINS_DIRECTORY)/multi-site.jar
+ $(WGET) $(CI_URL)/plugin-multi-site-bazel-stable-2.16/lastSuccessfulBuild/artifact/bazel-bin/plugins/multi-site/multi-site.jar -P $(GERRIT_1_LIB_DIRECTORY)
+ cp $(GERRIT_1_LIB_DIRECTORY)/multi-site.jar $(GERRIT_2_LIB_DIRECTORY)/multi-site.jar
plugin_healthcheck: prepare
- $(WGET) $(CI_URL)/plugin-healthcheck-bazel-stable-2.16/lastSuccessfulBuild/artifact/bazel-genfiles/plugins/healthcheck/healthcheck.jar -P $(GERRIT_1_PLUGINS_DIRECTORY)
+ $(WGET) $(CI_URL)/plugin-healthcheck-bazel-stable-2.16/lastSuccessfulBuild/artifact/bazel-bin/plugins/healthcheck/healthcheck.jar -P $(GERRIT_1_PLUGINS_DIRECTORY)
cp $(GERRIT_1_PLUGINS_DIRECTORY)/healthcheck.jar $(GERRIT_2_PLUGINS_DIRECTORY)/healthcheck.jar
build:
@@ -46,11 +46,11 @@
docker build -t $(MYDIR) ./gerrit-2
clean_gerrit: prepare
- -rm -fr gerrit-{1,2}/{db,data,cache,db,git,index,etc,bin,tmp}/*
- export GERRIT_REPLICATION_INSTANCE=gerrit-2 REPLICATE_ON_STARTUP=true; cat ./gerrit-common/replication.config.template | envsubst '$${GERRIT_REPLICATION_INSTANCE} $${REPLICATE_ON_STARTUP}' > ./gerrit-1/etc/replication.config
- export GERRIT_REPLICATION_INSTANCE=gerrit-1 REPLICATE_ON_STARTUP=false; cat ./gerrit-common/replication.config.template | envsubst '$${GERRIT_REPLICATION_INSTANCE} $${REPLICATE_ON_STARTUP}' > ./gerrit-2/etc/replication.config
- cp ./gerrit-common/gerrit.config ./gerrit-1/etc
- cp ./gerrit-common/gerrit.config ./gerrit-2/etc
+ -rm -fr gerrit-{1,2}/{db,data,cache,db,git,index,etc,bin,tmp,plugins,lib}/*
+ export GERRIT_REPLICATION_INSTANCE=gerrit-2; cat ./gerrit-common/replication.config.template | envsubst '$${GERRIT_REPLICATION_INSTANCE}' > ./gerrit-1/etc/replication.config
+ export GERRIT_REPLICATION_INSTANCE=gerrit-1; cat ./gerrit-common/replication.config.template | envsubst '$${GERRIT_REPLICATION_INSTANCE}' > ./gerrit-2/etc/replication.config
+ cp ./gerrit-common/*.config ./gerrit-1/etc
+ cp ./gerrit-common/*.config ./gerrit-2/etc
cp ./gerrit-common/git-daemon.sh ./gerrit-1/bin
cp ./gerrit-common/git-daemon.sh ./gerrit-2/bin
diff --git a/dockerised_local_env/common-gerrit-config/replication.config.template b/dockerised_local_env/common-gerrit-config/replication.config.template
deleted file mode 100644
index 537e8d8..0000000
--- a/dockerised_local_env/common-gerrit-config/replication.config.template
+++ /dev/null
@@ -1,17 +0,0 @@
-[remote "Replication"]
- url = git://${GERRIT_REPLICATION_INSTANCE}:9418/${name}.git
- adminUrl = ssh://root@sshd:22/var/${GERRIT_REPLICATION_INSTANCE}/git/${name}.git
- push = +refs/*:refs/*
- timeout = 600
- rescheduleDelay = 15
- replicationDelay = 5
- mirror = true
- createMissingRepositories = true
- replicateProjectDeletions = true
- replicateHiddenProjects = true
-[gerrit]
- autoReload = true
- replicateOnStartup = true
-[replication]
- lockErrorMaxRetries = 5
- maxRetries = 5
diff --git a/dockerised_local_env/docker-compose.yaml b/dockerised_local_env/docker-compose.yaml
index 9bf3fdf..2148b22 100644
--- a/dockerised_local_env/docker-compose.yaml
+++ b/dockerised_local_env/docker-compose.yaml
@@ -15,12 +15,17 @@
- ./gerrit-1/etc:/var/gerrit/etc
- ./gerrit-1/db:/var/gerrit/db
- ./gerrit-1/plugins:/var/gerrit/plugins
+ - ./gerrit-1/lib:/var/gerrit/lib
- ./gerrit-1/tmp:/var/gerrit/tmp
+ - ./gerrit-common/shared-dir:/var/gerrit/shared-dir
ports:
- "29418:29418"
- "8080:8080"
depends_on:
- sshd
+ - zookeeper
+ - kafka-broker
+ container_name: gerrit-1
gerrit-2:
build: ./gerrit-2
networks:
@@ -36,12 +41,17 @@
- ./gerrit-2/etc:/var/gerrit/etc
- ./gerrit-2/db:/var/gerrit/db
- ./gerrit-2/plugins:/var/gerrit/plugins
+ - ./gerrit-2/lib:/var/gerrit/lib
- ./gerrit-2/tmp:/var/gerrit/tmp
+ - ./gerrit-common/shared-dir:/var/gerrit/shared-dir
ports:
- "39418:29418"
- "8081:8080"
depends_on:
- sshd
+ - zookeeper
+ - kafka-broker
+ container_name: gerrit-2
sshd:
build: ./sshd
networks:
@@ -50,6 +60,23 @@
- ./gerrit-2/git:/var/gerrit-2/git
- ./gerrit-2/ssh:/root/.ssh
- ./gerrit-1/git:/var/gerrit-1/git
+ container_name: sshd
+ zookeeper:
+ image: wurstmeister/zookeeper:latest
+ networks:
+ gerrit-net:
+ ports:
+ - "2181:2181"
+ kafka-broker:
+ image: wurstmeister/kafka:2.12-2.1.0
+ networks:
+ gerrit-net:
+ ports:
+ - "9092:9092"
+ container_name: kafka-broker
+ environment:
+ KAFKA_ADVERTISED_HOST_NAME: kafka-broker
+ KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
networks:
gerrit-net:
driver: bridge
diff --git a/dockerised_local_env/gerrit-1/ssh/known_hosts b/dockerised_local_env/gerrit-1/ssh/known_hosts
deleted file mode 100644
index 012fa68..0000000
--- a/dockerised_local_env/gerrit-1/ssh/known_hosts
+++ /dev/null
@@ -1,2 +0,0 @@
-
-sshd,* ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKZRTdCgJ0FFTpP3ZzRgMMbYgaNmm6PDlg0e9QtOXzCG63GE41EExz2RWw7K9e6eRz+hSVf4hC/KMPgH3Clgo6w=
diff --git a/dockerised_local_env/gerrit-2/docker-entrypoint.sh b/dockerised_local_env/gerrit-2/docker-entrypoint.sh
index 09a3f4d..532377c 100755
--- a/dockerised_local_env/gerrit-2/docker-entrypoint.sh
+++ b/dockerised_local_env/gerrit-2/docker-entrypoint.sh
@@ -9,8 +9,11 @@
echo "Remove git repos created during init phase"
rm -fr /var/gerrit/git/*
- echo "Waiting for initial replication"
+ echo "Waiting for gerrit1 server to become available."
sleep 120
+ ssh -p 29418 admin@gerrit-1 replication start
+ echo "Waiting for replication to complete."
+ sleep 30
fi
java -jar /var/gerrit/bin/gerrit.war daemon
diff --git a/dockerised_local_env/gerrit-2/ssh/known_hosts b/dockerised_local_env/gerrit-2/ssh/known_hosts
deleted file mode 100644
index c6f2bdd..0000000
--- a/dockerised_local_env/gerrit-2/ssh/known_hosts
+++ /dev/null
@@ -1,2 +0,0 @@
-[localhost]:39418 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHAfiYyOe3Df8h+nT1axmB5F4cQQg/qnzvBEJsfKHt3uCYjkOLjjadYjujCnkzb74LToaw4pToTfAnCJ42jw5Bk=
-[gerrit-1]:22 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHAfiYyOe3Df8h+nT1axmB5F4cQQg/qnzvBEJsfKHt3uCYjkOLjjadYjujCnkzb74LToaw4pToTfAnCJ42jw5Bk=
diff --git a/dockerised_local_env/gerrit-common/gerrit.config b/dockerised_local_env/gerrit-common/gerrit.config
index cefc723..0bca480 100644
--- a/dockerised_local_env/gerrit-common/gerrit.config
+++ b/dockerised_local_env/gerrit-common/gerrit.config
@@ -2,6 +2,7 @@
basePath = git
serverId = ff17821f-9571-42df-b690-30660f2d6e20
canonicalWebUrl = http://localhost:8080/
+ installModule = com.googlesource.gerrit.plugins.multisite.Module
[database]
type = h2
database = db/ReviewDB
@@ -33,3 +34,5 @@
directory = cache
[plugins]
allowRemoteAdmin = true
+[plugin "websession-flatfile"]
+ directory = /var/gerrit/shared-dir
diff --git a/dockerised_local_env/gerrit-common/multi-site.config b/dockerised_local_env/gerrit-common/multi-site.config
new file mode 100644
index 0000000..04b9c2c
--- /dev/null
+++ b/dockerised_local_env/gerrit-common/multi-site.config
@@ -0,0 +1,25 @@
+[index]
+ maxTries = 6
+ retryInterval = 30000
+ numStripedLocks = 100
+
+[kafka]
+ bootstrapServers = kafka-broker:9092
+ securityProtocol = PLAINTEXT
+ indexEventTopic = gerrit_index
+ streamEventTopic = gerrit_stream
+ projectListEventTopic = gerrit_list_project
+ cacheEventTopic = gerrit_cache_eviction
+
+[kafka "subscriber"]
+ enabled = true
+ pollingIntervalMs = 1000
+ KafkaProp-enableAutoCommit = true
+ KafkaProp-autoCommitIntervalMs = 1000
+ KafkaProp-autoOffsetReset = latest
+
+[kafka "publisher"]
+ enabled = true
+
+[ref-database "zookeeper"]
+ connectString = "zookeeper:2181"
diff --git a/dockerised_local_env/gerrit-common/replication.config.template b/dockerised_local_env/gerrit-common/replication.config.template
index f51530f..3864e92 100644
--- a/dockerised_local_env/gerrit-common/replication.config.template
+++ b/dockerised_local_env/gerrit-common/replication.config.template
@@ -11,7 +11,7 @@
replicateHiddenProjects = true
[gerrit]
autoReload = true
- replicateOnStartup = ${REPLICATE_ON_STARTUP}
+ replicateOnStartup = false
[replication]
lockErrorMaxRetries = 5
maxRetries = 5