From 3ffe10ac40fdf5f113176ee6ea5f09ae4952c69f Mon Sep 17 00:00:00 2001 From: OG T Date: Fri, 10 Apr 2026 13:13:34 +0800 Subject: [PATCH] =?UTF-8?q?fix(ci):=20B5=20=E6=95=B4=E5=90=88=E6=B8=AC?= =?UTF-8?q?=E8=A9=A6=20=E2=80=94=20runner=20=E5=8A=A0=E5=85=A5=20compose?= =?UTF-8?q?=20=E7=B6=B2=E8=B7=AF=E7=9B=B4=E9=80=A3=20postgres:5432?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 放棄 published port 路徑,改用 docker network connect 讓 runner 直接進入 compose 網路,用 container IP:5432 連線 Co-Authored-By: Claude Sonnet 4.6 --- .gitea/workflows/cd.yaml | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/.gitea/workflows/cd.yaml b/.gitea/workflows/cd.yaml index 5fcaaf19..993f5f16 100644 --- a/.gitea/workflows/cd.yaml +++ b/.gitea/workflows/cd.yaml @@ -124,27 +124,24 @@ jobs: exit $PYTEST_EXIT # ── 整合測試 B5 (2026-04-10) ────────────────────────────────────────── - # DinD 環境: runner 是 container,compose sibling 的 published port 綁在 host - # 用 host docker bridge IP (172.17.0.1) + exposed port 15432 連 postgres - name: Integration Tests (B5 — 真實 DB) run: | cd apps/api docker compose -f docker-compose.test.yml up -d --wait - # schema 初始化 (exec stdin 不需要 volume) docker compose -f docker-compose.test.yml exec -T postgres-test \ psql -U awoooi -d awoooi_test \ < tests/integration/setup_test_schema.sql - # DinD: runner 連 sibling container 需走 host bridge → port 15432 - # ip 指令在精簡 runner 環境可能不存在,改用 /proc/net/route - HOST_IP=$(awk '$2=="00000000"{printf "%d.%d.%d.%d\n", - "0x"substr($3,7,2)+0,"0x"substr($3,5,2)+0, - "0x"substr($3,3,2)+0,"0x"substr($3,1,2)+0}' /proc/net/route | head -1) - # fallback: docker0 bridge 慣例 IP - [ -z "$HOST_IP" ] && HOST_IP="172.17.0.1" - echo "host bridge IP: $HOST_IP" - TEST_DATABASE_URL="postgresql+asyncpg://awoooi:awoooi_test_2026@${HOST_IP}:15432/awoooi_test?ssl=disable" \ + # 直接取 postgres container 的 IP,把 runner 加入同一網路 + PG_CONTAINER=$(docker ps --filter name=postgres-test --format '{{.Names}}' | head -1) + PG_NETWORK=$(docker inspect "$PG_CONTAINER" --format '{{range $k,$v := .NetworkSettings.Networks}}{{$k}}{{end}}' | head -1) + PG_IP=$(docker inspect "$PG_CONTAINER" --format "{{(index .NetworkSettings.Networks \"$PG_NETWORK\").IPAddress}}") + echo "PG container=$PG_CONTAINER network=$PG_NETWORK ip=$PG_IP" + # runner 加入 compose 網路,直連 5432 + docker network connect "$PG_NETWORK" "$(cat /etc/hostname)" 2>/dev/null || true + TEST_DATABASE_URL="postgresql+asyncpg://awoooi:awoooi_test_2026@${PG_IP}:5432/awoooi_test?ssl=disable" \ /opt/api-venv/bin/pytest tests/integration/test_b5_core_flows.py -v --tb=short TEST_EXIT=$? + docker network disconnect "$PG_NETWORK" "$(cat /etc/hostname)" 2>/dev/null || true docker compose -f docker-compose.test.yml down -v 2>/dev/null || true exit $TEST_EXIT