From 99a1925d1ad174fe479f9ca0ec82a67f4a5f418d Mon Sep 17 00:00:00 2001 From: jmj Date: Wed, 2 Sep 2026 10:34:28 +0900 Subject: [PATCH] =?UTF-8?q?fix(ci):=20AI=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20?= =?UTF-8?q?=EB=B9=8C=EB=93=9C=EC=9D=98=20playwright=20=EC=84=A4=EC=B9=98?= =?UTF-8?q?=EB=A5=BC=20IPv4=20=EC=9A=B0=EC=84=A0=20+=20=EC=9E=AC=EC=8B=9C?= =?UTF-8?q?=EB=8F=84=EB=A1=9C=20=EC=95=88=EC=A0=95=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 빌드 호스트에 IPv6 경로가 없어 `playwright install` 이 cdn.playwright.dev 로 IPv6 연결을 시도하다 ENETUNREACH 로 실패, 배포가 통째로 죽는 일이 있었다 (happy-eyeballs 가 IPv4 를 잡으면 성공하는 간헐적 실패). NODE_OPTIONS=--dns-result-order=ipv4first 로 Node DNS 를 IPv4 우선으로 두고, 5회 재시도로 감쌌다. 5회 모두 실패하면 빌드를 실패시켜 조용한 누락은 막는다. --- ai/Dockerfile | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/ai/Dockerfile b/ai/Dockerfile index 433b73b8..1c99c3d1 100644 --- a/ai/Dockerfile +++ b/ai/Dockerfile @@ -8,7 +8,15 @@ COPY pyproject.toml uv.lock ./ RUN uv sync --frozen --no-dev # 웹 이력서(JS 렌더링 SPA) 폴백용 헤드리스 chromium + 시스템 의존성. -RUN uv run playwright install --with-deps chromium +# 빌드 호스트에 IPv6 경로가 없어 cdn.playwright.dev 로의 IPv6 연결이 간헐적으로 +# 실패(ENETUNREACH)해 배포가 죽던 문제 → Node DNS 를 IPv4 우선으로 두고 재시도한다. +ENV NODE_OPTIONS=--dns-result-order=ipv4first +RUN for i in 1 2 3 4 5; do \ + uv run playwright install --with-deps chromium && exit 0; \ + echo "playwright install attempt $i failed; retrying in 10s" >&2; \ + sleep 10; \ + done; \ + echo "playwright install failed after 5 attempts" >&2; exit 1 COPY src/ src/