From 40af8a2e096b65bdec43be88af74a25aaba8d423 Mon Sep 17 00:00:00 2001 From: ttipo Date: Thu, 17 Sep 2026 23:48:31 +0900 Subject: [PATCH] =?UTF-8?q?fix(ci):=20=EB=AA=A8=EB=93=A0=20=EC=9E=A1?= =?UTF-8?q?=EC=97=90=20timeout-minutes=20=EC=B6=94=EA=B0=80=20=E2=80=94=20?= =?UTF-8?q?=EB=A9=88=EC=B6=98=20=EC=9E=A1=EC=9D=98=20=EB=9F=AC=EB=84=88=20?= =?UTF-8?q?=EC=A0=90=EC=9C=A0=20=EB=B0=A9=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 러너 환경에서 잡이 간헐적으로 멈추는 것을 확인했다. Flutter 잡이 CPU 0%·네트워크 정지 상태로 25분 넘게 러너를 점유해 이후 잡들이 시작조차 하지 못했다. Frontend 잡에서도 같은 증상이 나타났다. 러너가 하나뿐이면 멈춘 잡 하나가 이후 전부를 굶긴다. 워크플로를 분리해도 점유 자체는 막지 못하므로 상한이 필요하다. - backend 20분 / frontend 15분 / error-codes-sync 10분 / flutter 25분 - 증상과 즉시 해제 방법(잡 컨테이너 중지)을 ci/README.md 에 정리 CI 작성 시 넣었어야 할 기본 안전장치를 빠뜨렸던 것을 보완한다. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/ci-flutter.yml | 2 ++ .github/workflows/ci.yml | 6 ++++++ ci/README.md | 15 +++++++++++++++ 3 files changed, 23 insertions(+) diff --git a/.github/workflows/ci-flutter.yml b/.github/workflows/ci-flutter.yml index af51cf8..4d899e8 100644 --- a/.github/workflows/ci-flutter.yml +++ b/.github/workflows/ci-flutter.yml @@ -31,6 +31,8 @@ jobs: flutter: name: Flutter (analyze · test) runs-on: ubuntu-latest + # 멈춘 잡이 러너를 무한 점유하지 않도록 상한을 둔다 + timeout-minutes: 25 defaults: run: working-directory: flutter diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 40346fb..bbd8045 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,6 +14,8 @@ jobs: backend: name: Backend (lint · test · e2e · build) runs-on: ubuntu-latest + # 멈춘 잡이 러너를 무한 점유하지 않도록 상한을 둔다 + timeout-minutes: 20 defaults: run: working-directory: backend @@ -72,6 +74,8 @@ jobs: frontend: name: Frontend (lint · type-check · test) runs-on: ubuntu-latest + # 멈춘 잡이 러너를 무한 점유하지 않도록 상한을 둔다 + timeout-minutes: 15 defaults: run: working-directory: frontend @@ -98,6 +102,8 @@ jobs: error-codes-sync: name: 에러 코드 SSOT 동기화 검사 runs-on: ubuntu-latest + # 멈춘 잡이 러너를 무한 점유하지 않도록 상한을 둔다 + timeout-minutes: 10 steps: - uses: actions/checkout@v4 diff --git a/ci/README.md b/ci/README.md index 6d91390..9147ae6 100644 --- a/ci/README.md +++ b/ci/README.md @@ -80,6 +80,21 @@ Flutter 는 SDK 다운로드로 매 실행 수 분이 걸리는데, backend/fron > 러너는 기본적으로 잡을 **하나씩** 처리한다. 전체 시간을 줄이려면 러너를 여러 개 띄우거나 > `act_runner` 설정에서 동시 실행 수를 늘린다. +## 잡이 멈출 때 + +컨테이너 환경에서 잡이 간헐적으로 멈추는 경우가 있다 (CPU 0%, 네트워크 정지 상태로 진행 없음). +러너가 하나뿐이면 **멈춘 잡 하나가 이후 모든 잡을 굶긴다.** + +그래서 모든 잡에 `timeout-minutes` 를 둔다. 상한에 걸리면 강제 종료되고 다음 잡으로 넘어간다. +새 잡을 추가할 때도 반드시 상한을 지정할 것. + +멈춘 잡을 즉시 해제하려면 해당 컨테이너를 중지하면 된다 (러너가 실패로 처리하고 다음 잡을 집는다). + +```bash +docker ps --format "{{.Names}}" | grep GITEA-ACTIONS # 실행 중인 잡 컨테이너 +docker stop <컨테이너명> +``` + ## 주의 - **토큰은 `ci/.env` 에만** 둡니다. 이 파일은 루트 `.gitignore` 로 커밋되지 않습니다.