From ec1919e4bf05fe2ad2c8702d3fdd05ccb326a92c Mon Sep 17 00:00:00 2001 From: ttipo Date: Wed, 28 Oct 2026 22:28:12 +0900 Subject: [PATCH] =?UTF-8?q?fix(docker):=20CI=20=EB=9F=AC=EB=84=88=20?= =?UTF-8?q?=E2=80=94=20compose=20=ED=94=84=EB=A1=9C=EC=A0=9D=ED=8A=B8=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=EC=9D=84=20=EB=9F=AC=EB=84=88=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=EC=9C=BC=EB=A1=9C=20=C2=B7=20=EC=9D=B4=EB=AF=B8?= =?UTF-8?q?=EC=A7=80=20=ED=8C=90=20=EA=B3=A0=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 프로젝트 이름이 비어 있으면 폴더 이름 ci 가 되어, 같은 템플릿을 쓰는 다른 프로젝트의 러너와 프로젝트 · 서비스(ci / runner)가 겹친다. 그러면 up 이 그쪽 컨테이너를 지우고 이 러너로 다시 만든다 (같은 PC 의 다른 프로젝트 러너가 project=ci 였다 — 띄우기 전에 찾았다). 이름을 RUNNER_NAME 으로 둔다. 러너 이미지는 latest 대신 같은 digest 인 0.6.1 로 고정한다(이미지 버전 고정 규칙). Co-Authored-By: Claude Opus 5.5 --- ci/.env.example | 3 ++- ci/README.md | 4 ++++ ci/docker-compose.runner.yml | 8 +++++++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/ci/.env.example b/ci/.env.example index c245e69..b04addd 100644 --- a/ci/.env.example +++ b/ci/.env.example @@ -12,7 +12,8 @@ GITEA_INSTANCE_URL=https://git.wandergo.net # (여러 저장소에서 공용으로 쓰려면 관리자 화면의 인스턴스 레벨 토큰을 사용) GITEA_RUNNER_REGISTRATION_TOKEN= -# 러너 식별 이름 — 여러 대를 띄운다면 구분되게 짓는다 +# 러너 식별 이름 — 컨테이너 이름이자 compose 프로젝트 이름이다. 같은 PC 에 다른 프로젝트의 러너가 있으면 겹치지 않게 짓는다 +# (예: <프로젝트>-runner — 겹치면 `up` 이 그쪽 컨테이너를 지우고 다시 만든다) RUNNER_NAME=gitea-runner # 라벨: <워크플로의 runs-on>:docker://<잡을 실행할 이미지> diff --git a/ci/README.md b/ci/README.md index 9147ae6..68759a0 100644 --- a/ci/README.md +++ b/ci/README.md @@ -97,6 +97,10 @@ docker stop <컨테이너명> ## 주의 +- **같은 PC 에 다른 프로젝트의 러너가 있으면 `RUNNER_NAME` 을 겹치지 않게** 짓습니다. compose 의 프로젝트 이름이 이 값이고(`docker-compose.runner.yml` 의 `name:`), + 컨테이너 이름도 이 값입니다. 프로젝트 이름을 비워 두면 폴더 이름 `ci` 가 되어, 같은 템플릿을 쓰는 다른 프로젝트의 러너(역시 `ci` · 서비스 `runner`)와 겹치고 + `up` 이 그쪽 컨테이너를 지운 뒤 이 러너로 다시 만듭니다 (2026-10-28 에 겪을 뻔했다 — 띄우기 전에 `docker compose ls -a` 로 이름을 본다). +- 러너 이미지는 판까지 고정합니다(`gitea/act_runner:0.6.1`) — 올릴 때는 docker 스킬의 "이미지 버전 고정" 갱신 규칙을 따릅니다. - **토큰은 `ci/.env` 에만** 둡니다. 이 파일은 루트 `.gitignore` 로 커밋되지 않습니다. - `runner-data/` 에 등록 정보가 저장됩니다. 지우면 토큰으로 재등록해야 합니다. - 러너는 도커 소켓에 접근하므로 **호스트에 대한 사실상의 관리자 권한**을 갖습니다. diff --git a/ci/docker-compose.runner.yml b/ci/docker-compose.runner.yml index 50f16c2..ff22bb6 100644 --- a/ci/docker-compose.runner.yml +++ b/ci/docker-compose.runner.yml @@ -5,9 +5,15 @@ # # 사용법은 ci/README.md 참조. +# 프로젝트 이름 — 러너 이름을 그대로 쓴다. 비워 두면 폴더 이름(`ci`)이 되어, 같은 템플릿을 쓰는 다른 프로젝트의 러너와 +# 프로젝트 · 서비스가 겹친다(둘 다 ci / runner) — 그러면 `up` 이 그쪽 컨테이너를 지우고 이 러너로 다시 만든다 +# (2026-10-28 — 같은 PC 의 다른 프로젝트 러너가 project=ci 였다). 러너 이름은 컨테이너 이름이라 어차피 PC 안에서 겹치면 안 된다 +name: ${RUNNER_NAME:-gitea-runner} + services: runner: - image: gitea/act_runner:latest + # 판까지 고정한다 (docker 스킬 "이미지 버전 고정" — latest 는 그날의 최신을 받는다). 0.6.1 = 2026-10-28 의 latest 와 같은 digest + image: gitea/act_runner:0.6.1 container_name: ${RUNNER_NAME:-gitea-runner} restart: always environment: