Use remote Bazel cache on https://gerrit-ci.gerritforge.com/cache
Use Bazel cache across different worker nodes: by using the same
global Bazel cache allow reusing artifacts from the previous builds
and avoid running tests if the dependent code hasn't changed.
Using remote Bazel cache also avoids re-building if nothing changed,
as the build artifacts would be fetched from the remote Bazel cache
thanks to cache hits.
In fact, the 'bazel build :release :api' would be a no-op if only
some files were changed that do not contribute to the final artifact
(say contrib directory).
How to test the Bazel cache locally:
$ bazelisk build \
--remote_cache=https://gerrit-ci.gerritforge.com/cache \
--noremote_upload_local_results \
gerrit
Change-Id: I261d086bb5082969f422ff8a79ce6ec3fed7eb9a
diff --git a/jenkins-docker/Makefile b/jenkins-docker/Makefile
index c34859e..5cfc193 100644
--- a/jenkins-docker/Makefile
+++ b/jenkins-docker/Makefile
@@ -1,5 +1,5 @@
-SLAVE_DIRS ?= slave-debian slave-chrome slave-node-wct slave-bazel-nocache slave-bazel slave-bazel-docker slave-sbt slave-mvn slave-release slave-python3 slave-jekyll
-ALL_DIRS ?= master $(SLAVE_DIRS)
+SLAVE_DIRS ?= slave-debian slave-chrome slave-node-wct slave-bazel-nocache slave-bazel-docker slave-sbt slave-mvn slave-release slave-python3 slave-jekyll
+ALL_DIRS ?= master bazel-cache $(SLAVE_DIRS)
NO_CACHE ?= true
default: build
diff --git a/jenkins-docker/bazel-cache/Dockerfile b/jenkins-docker/bazel-cache/Dockerfile
new file mode 100644
index 0000000..d156129
--- /dev/null
+++ b/jenkins-docker/bazel-cache/Dockerfile
@@ -0,0 +1,17 @@
+FROM nginx:1.17.9-alpine
+
+ENV NGINX_WEBDAV_ALLOW 0.0.0.0/0
+
+COPY default.conf /etc/nginx/conf.d/default.conf.template
+
+COPY entrypoint.sh /
+
+RUN mkdir -p /data/www && \
+ mkdir -p /data/client_temp && \
+ chown -R nginx:nginx /data
+
+RUN apk add gettext
+
+VOLUME [ "/data" ]
+
+ENTRYPOINT /entrypoint.sh
diff --git a/jenkins-docker/bazel-cache/Makefile b/jenkins-docker/bazel-cache/Makefile
new file mode 100644
index 0000000..2623506
--- /dev/null
+++ b/jenkins-docker/bazel-cache/Makefile
@@ -0,0 +1,22 @@
+NO_CACHE=false
+IMAGE=gerritforge/bazel-cache
+CACHE_ALLOW=0.0.0.0/0
+
+# Targets
+
+build:
+ docker build --no-cache=$(NO_CACHE) -t ${IMAGE} .
+
+publish:
+ docker push ${IMAGE}
+
+clean:
+ docker rmi -f ${IMAGE}
+
+start:
+ docker run --rm -d -e NGINX_WEBDAV_ALLOW=${CACHE_ALLOW} --net=host --name bazel_cache ${IMAGE}
+
+stop:
+ docker kill bazel_cache
+
+.PHONY: clean image publish start stop
diff --git a/jenkins-docker/bazel-cache/default.conf b/jenkins-docker/bazel-cache/default.conf
new file mode 100644
index 0000000..180d7c5
--- /dev/null
+++ b/jenkins-docker/bazel-cache/default.conf
@@ -0,0 +1,18 @@
+server {
+ listen 80;
+ server_name localhost;
+
+ location /cache/ {
+ root /data/www;
+ client_body_temp_path /data/client_temp;
+ dav_methods PUT;
+ create_full_put_path on;
+ client_max_body_size 1G;
+ dav_access group:rw all:r;
+
+ limit_except GET {
+ allow $NGINX_WEBDAV_ALLOW;
+ deny all;
+ }
+ }
+}
diff --git a/jenkins-docker/bazel-cache/entrypoint.sh b/jenkins-docker/bazel-cache/entrypoint.sh
new file mode 100755
index 0000000..ae6d217
--- /dev/null
+++ b/jenkins-docker/bazel-cache/entrypoint.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+cat /etc/nginx/conf.d/default.conf.template | envsubst > /etc/nginx/conf.d/default.conf
+nginx -g "daemon off;"
diff --git a/jenkins/gerrit-bazel-verifier-test.sh b/jenkins/gerrit-bazel-verifier-test.sh
index 32e318b..cb89104 100755
--- a/jenkins/gerrit-bazel-verifier-test.sh
+++ b/jenkins/gerrit-bazel-verifier-test.sh
@@ -7,7 +7,7 @@
echo "Test with mode=$MODE"
echo '----------------------------------------------'
-export BAZEL_OPTS="--spawn_strategy=standalone --genrule_strategy=standalone \
+export BAZEL_OPTS="$BAZEL_OPTS --spawn_strategy=standalone --genrule_strategy=standalone \
--test_output errors \
--test_summary detailed --flaky_test_attempts 3 \
--test_verbose_timeout_warnings --build_tests_only \
diff --git a/jenkins/gerrit-verifier.yaml b/jenkins/gerrit-verifier.yaml
index a1b2494..2858a8e 100644
--- a/jenkins/gerrit-verifier.yaml
+++ b/jenkins/gerrit-verifier.yaml
@@ -110,8 +110,8 @@
node: bazel-debian
properties:
- inject:
- properties-content: >
- BAZEL_OPTS=--ram_utilization_factor=30
+ properties-content: "BAZEL_OPTS=--ram_utilization_factor=30 \
+ --remote_cache=https://gerrit-ci.gerritforge.com/cache"
builders:
- merge-target-branch
- fetch-all-submodules