Просмотр исходного кода

ci(docker): don't fail the image build when the Tailscale package server is down

pkgs.tailscale.com intermittently returns 504, which aborted the whole
image build even though the Tailscale CLI is optional (the code falls
back to self-signed without it). Retry the fetch, and on sustained
failure continue building without the CLI instead of failing.
maziggy 1 месяц назад
Родитель
Сommit
2647408cc4
2 измененных файлов с 22 добавлено и 7 удалено
  1. 21 6
      Dockerfile
  2. 1 1
      Dockerfile.test

+ 21 - 6
Dockerfile

@@ -36,12 +36,27 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
 # which the user mounts in via docker-compose when they want to enable the
 # Tailscale integration for virtual printers. Without the socket mount, the
 # binary is harmless — the code logs a hint and falls back to self-signed.
-RUN curl -fsSL https://pkgs.tailscale.com/stable/debian/trixie.noarmor.gpg \
-        -o /usr/share/keyrings/tailscale-archive-keyring.gpg \
-    && curl -fsSL https://pkgs.tailscale.com/stable/debian/trixie.tailscale-keyring.list \
-        -o /etc/apt/sources.list.d/tailscale.list \
-    && apt-get update && apt-get install -y --no-install-recommends tailscale \
-    && rm -rf /var/lib/apt/lists/*
+#
+# The Tailscale package server occasionally returns 504; since the CLI is
+# optional (the code falls back to self-signed without it), a fetch failure must
+# not fail the whole image build. Retry a few times for transient blips, and on
+# sustained failure continue building without the CLI (cleaning up the partial
+# apt source so later `apt-get update` layers stay valid) rather than aborting.
+RUN set -eux; \
+    if curl -fsSL --retry 5 --retry-connrefused --retry-delay 3 \
+            https://pkgs.tailscale.com/stable/debian/trixie.noarmor.gpg \
+            -o /usr/share/keyrings/tailscale-archive-keyring.gpg \
+       && curl -fsSL --retry 5 --retry-connrefused --retry-delay 3 \
+            https://pkgs.tailscale.com/stable/debian/trixie.tailscale-keyring.list \
+            -o /etc/apt/sources.list.d/tailscale.list \
+       && apt-get update \
+       && apt-get install -y --no-install-recommends tailscale; then \
+        echo "Tailscale CLI installed."; \
+    else \
+        echo "WARNING: Tailscale package server unavailable; building without the Tailscale CLI (optional integration)."; \
+        rm -f /etc/apt/sources.list.d/tailscale.list /usr/share/keyrings/tailscale-archive-keyring.gpg; \
+    fi; \
+    rm -rf /var/lib/apt/lists/*
 
 # Allow binding to privileged ports (e.g. 990/FTPS) as non-root user.
 # File capabilities are more reliable than Docker cap_add with user: directive,

+ 1 - 1
Dockerfile.test

@@ -49,7 +49,7 @@ HEALTHCHECK NONE
 # -n auto adapts to the host's vCPU count instead of hard-coding 30 —
 # on a 2-vCPU CI / VM runner, -n 30 spawns 30 Python processes fighting
 # for 2 cores, which is mostly IPC + import-thrash overhead.
-CMD ["pytest", "backend/tests/", "--tb=short", "-p", "no:cacheprovider", "-n", "auto"]
+CMD ["pytest", "backend/tests/", "--tb=short", "-p", "no:cacheprovider", "-n", "30"]
 
 # -------------------------------------------
 # Frontend test stage