fix(ci): 서비스 컨테이너 포트 매핑 제거 — 잡이 시작조차 못 하던 문제
CI / Backend (lint · test · e2e · build) (push) Successful in 10m30s
CI / Frontend (lint · type-check · test) (push) Successful in 9m52s
CI / 에러 코드 SSOT 동기화 검사 (push) Has been cancelled
CI / Flutter (analyze · test) (push) Has been cancelled

러너를 붙이고 첫 실행에서 backend 잡의 모든 스텝이 checkout 부터 failure 로 표시됐다.
스텝이 실패한 게 아니라 서비스 컨테이너가 뜨지 못해 잡 준비 단계에서 죽은 것이다.

원인은 postgres 서비스의 ports: 5432:5432 였다.
개발 DB(project-db)가 이미 호스트 5432 를 점유하고 있어 바인딩이 충돌했다.

Gitea 러너는 잡을 컨테이너로 실행하고 서비스와 같은 네트워크에 붙이므로
호스트 포트 매핑이 애초에 필요 없고, 접근도 localhost 가 아니라 서비스 이름으로 해야 한다.
(GitHub Actions 는 잡이 VM 위에서 직접 돌아 localhost + ports 를 쓰는 점이 다르다)

- 서비스의 ports 매핑 제거
- e2e 스텝의 DB_HOST 를 localhost → postgres(서비스 이름)로 변경
- 두 플랫폼의 차이와 "모든 스텝이 한꺼번에 실패" 증상을 ci/README.md 에 정리

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-17 22:45:26 +09:00
parent ea46fe7817
commit 1c0176640e
2 changed files with 26 additions and 4 deletions
+9 -4
View File
@@ -17,7 +17,13 @@ jobs:
defaults:
run:
working-directory: backend
# e2e 는 응답 계약을 실제 HTTP 로 검증하므로 DB 가 필요하다
# e2e 는 응답 계약을 실제 HTTP 로 검증하므로 DB 가 필요하다.
#
# ⚠️ 호스트 포트 매핑(ports)을 두지 않는다.
# Gitea Actions 러너는 잡을 **컨테이너로** 실행하고 서비스와 같은 네트워크에 붙여준다.
# 따라서 서비스 이름(postgres)으로 바로 접근할 수 있고, 호스트 포트는 필요 없다.
# 오히려 개발 DB 가 이미 5432 를 쓰고 있으면 충돌해 잡 전체가 시작조차 못 한다.
# (GitHub Actions 는 잡이 VM 위에서 직접 돌아 localhost + ports 를 쓰는 점이 다르다)
services:
postgres:
image: postgres:15-alpine
@@ -25,8 +31,6 @@ jobs:
POSTGRES_USER: ci_user
POSTGRES_PASSWORD: ci_password
POSTGRES_DB: ci_db
ports:
- 5432:5432
options: >-
--health-cmd "pg_isready -U ci_user -d ci_db"
--health-interval 10s
@@ -55,7 +59,8 @@ jobs:
run: npm run test:e2e
env:
NODE_ENV: test
DB_HOST: localhost
# 서비스 컨테이너의 네트워크 별칭 (localhost 는 잡 컨테이너 자신을 가리킨다)
DB_HOST: postgres
DB_PORT: 5432
DB_USER: ci_user
DB_PASSWORD: ci_password