Add docker-compose to spinup test environment This docker compose is meant to spin up a primary-replica with pull replication. Replication happens via Git over HTTP using bearer token for authentication. Issue: Bug 16530 Change-Id: I475f49566fc3855163e007abeb88f28a338c1ac2
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d392f0e --- /dev/null +++ b/.gitignore
@@ -0,0 +1 @@ +*.jar
diff --git a/example-setup/Dockerfile b/example-setup/Dockerfile new file mode 100644 index 0000000..368f26e --- /dev/null +++ b/example-setup/Dockerfile
@@ -0,0 +1,24 @@ +FROM gerritcodereview/gerrit:3.5.4-almalinux8 + +USER root + +RUN yum update -y &&\ + yum install -y gettext + +ARG JAVA_OPTS='--add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.lang.invoke=ALL-UNNAMED' +ARG GERRIT_BRANCH=stable-3.5 +ARG LAST_BUILD=lastSuccessfulBuild/artifact/bazel-bin/plugins + +RUN java $JAVA_OPTS -jar /var/gerrit/bin/gerrit.war init --batch --install-all-plugins -d /var/gerrit && \ + java $JAVA_OPTS -jar /var/gerrit/bin/gerrit.war reindex -d /var/gerrit + +RUN git config -f /var/gerrit/etc/secure.config --add auth.bearerToken "theSecretBearerToken" + +COPY --chown=gerrit:gerrit pull-replication.jar /var/gerrit/plugins/pull-replication.jar +COPY --chown=gerrit:gerrit pull-replication.jar /var/gerrit/lib/pull-replication.jar +COPY --chown=gerrit:gerrit entrypoint.sh /tmp/ +RUN chmod +x /tmp/entrypoint.sh +COPY --chown=gerrit:gerrit configs/replication.config.template /var/gerrit/etc/ +COPY --chown=gerrit:gerrit configs/gerrit.config.template /var/gerrit/etc/ + +ENTRYPOINT [ "/tmp/entrypoint.sh" ] \ No newline at end of file
diff --git a/example-setup/README.md b/example-setup/README.md new file mode 100644 index 0000000..e52ad45 --- /dev/null +++ b/example-setup/README.md
@@ -0,0 +1,17 @@ +# What is this for? + +This docker compose set up a primary replica using pull-replication to replicate the data +over git http across the 2 nodes. + +To spin up your environment: +1) copy the pull-replication artefact to test in te example-setup directory: + +```bash +cp $GERRIT_HOME/bazel-bin/plugins/pull-replication/pull-replication.jar . +``` + +2) spin up the docker compose + +```bash +docker-compose up +``` \ No newline at end of file
diff --git a/example-setup/configs/gerrit.config.template b/example-setup/configs/gerrit.config.template new file mode 100644 index 0000000..8bc8391 --- /dev/null +++ b/example-setup/configs/gerrit.config.template
@@ -0,0 +1,27 @@ +[gerrit] + basePath = git + serverId = 69ec38f0-350e-4d9c-96d4-bc956f2faaac + canonicalWebUrl = http://localhost:8080 + instanceId = $INSTANCE_ID +[container] + javaOptions = "-Dflogger.backend_factory=com.google.common.flogger.backend.log4j.Log4jBackendFactory#getInstance" + javaOptions = "-Dflogger.logging_context=com.google.gerrit.server.logging.LoggingContext#getInstance" + replica = $REPLICA +[index] + type = LUCENE +[auth] + type = DEVELOPMENT_BECOME_ANY_ACCOUNT +[receive] + enableSignedPush = false +[sendemail] + smtpServer = localhost +[sshd] + listenAddress = *:29418 + advertisedAddress = *:29418 +[httpd] + listenUrl = http://*:8080/ + requestLog = true +[cache] + directory = cache +[plugins] + allowRemoteAdmin = true
diff --git a/example-setup/configs/replication.config.template b/example-setup/configs/replication.config.template new file mode 100644 index 0000000..2939297 --- /dev/null +++ b/example-setup/configs/replication.config.template
@@ -0,0 +1,25 @@ +[gerrit] + autoReload = true + replicateOnStartup = false +[replication] + excludeRefs = ^refs/users/\\d\\d/\\d+/edit-\\d+/\\d+$ + lockErrorMaxRetries = 5 + maxRetries = 100 + useCGitClient = false + consumeStreamEvents = false + syncRefs="ALL REFS ASYNC" + maxApiPayloadSize=40000 +[remote "$REMOTE"] + url = http://$REMOTE_URL:8080/a/#{name}#.git + apiUrl = http://$REMOTE_URL:8080 + fetch = +refs/*:refs/* + mirror = true + timeout = 60 # In seconds + connectionTimeout = 120000 # In mseconds + rescheduleDelay = 15 + replicationDelay = 1 + threads = 4 + createMissingRepositories = true + replicateProjectDeletions = true + replicateHiddenProjects = true + tagopt= --no-tags \ No newline at end of file
diff --git a/example-setup/docker-compose.yaml b/example-setup/docker-compose.yaml new file mode 100644 index 0000000..b36f426 --- /dev/null +++ b/example-setup/docker-compose.yaml
@@ -0,0 +1,24 @@ +version: '3' +services: + gerrit1: + build: . + environment: + - INSTANCE_ID=primary + - REPLICA=false + - REMOTE=replica-1 + - REMOTE_URL=gerrit2 + ports: + - "8080:8080" + - "29418:29418" + gerrit2: + build: . + environment: + - INSTANCE_ID=replica-1 + - REPLICA=true + - REMOTE=primary + - REMOTE_URL=gerrit1 + ports: + - "8081:8080" + - "29419:29418" + depends_on: + - gerrit1 \ No newline at end of file
diff --git a/example-setup/entrypoint.sh b/example-setup/entrypoint.sh new file mode 100644 index 0000000..412c487 --- /dev/null +++ b/example-setup/entrypoint.sh
@@ -0,0 +1,20 @@ +#!/bin/bash -x + +function setup_replication_config { + + echo "Replacing variables for file /var/gerrit/etc/replication.config.template" + cat /var/gerrit/etc/replication.config.template | envsubst | sed 's/#{name}#/${name}/g' > /var/gerrit/etc/replication.config + + cat /var/gerrit/etc/replication.config +} + +function setup_gerrit_config { + echo "Replacing variables for file /var/gerrit/etc/gerrit.config.template" + cat /var/gerrit/etc/gerrit.config.template | envsubst > /var/gerrit/etc/gerrit.config +} + +setup_replication_config +setup_gerrit_config + +echo "Running Gerrit ..." +exec /var/gerrit/bin/gerrit.sh run \ No newline at end of file