catalog/image-map/README.md는 "이미지 하나가 여러 버전 디렉토리에 걸리는 것이 정상"이라 서술했지만, 실측하니 근거가 반대였다. 다버전 동시 매핑은 카탈로그 전체에서 cnpg-postgresql 하나뿐이었고, 그 cnpg-cluster 1.0.0/1.1.0도 "병행 유지" 근거가 없이 같은 태그를 쓰고 있었다 — 매핑 갱신 시 옛 버전을 안 지운 결과에 가까웠다. 반대로 argocd.env는 이미 argo-cd/10.4.0 하나만 가리키고 7.8.11은 빠져 있는데, 이건 사고가 아니라 의도적 정책이었다(MEMORY.md: "직전 버전을 없애는 결정이라 PR #28에서 보류했다" — 동결 자체는 이미 관행이었다). 정정한 정책: CHART_DIRS는 기본적으로 최신 버전 하나만 가리키고, 차트를 올리면 이 값을 교체한다(추가 아님) — 옛 버전은 그 시점 태그로 동결된다. 그리고 차트를 올리는 트리거 자체도 "업스트림에 새 차트가 있다"가 아니라 "지금 쓰는 앱 버전을 유지 못 하는 구체적 이유"(CVE·EOL·필수 기능·호환성)여야 한다 — catalog-update-pipeline SKILL.md에 이 기준이 없었어서 추가했다. keycloak.env(7.2.2→7.3.0)·cnpg-postgresql.env(1.0.0 제거)를 새 정책에 맞춰 바로잡는다 — keycloakx 7.3.0 업그레이드(#51) 때 빠뜨렸던 매핑 갱신이기도 하다. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2.4 KiB
이미지 → 차트 매핑
hardened-containers 레포가 발행하는 자체 빌드 이미지가 이 카탈로그의 어느 차트·어느 필드를
가리키는지 선언한다. 이 디렉토리에 파일이 있는 이미지 이름 = 이 카탈로그가 추적하는
자체 빌드 이미지 목록이다(.github/workflows/catalog-tag-update.yml이 이 목록을 기준으로
동작한다).
이관 배경: 이 정보는 원래 hardened-containers(당시 images/<image>/catalog.env)에 있었다.
"어느 이미지를 쓰는가"는 카탈로그가 알아야 하고 "그 이미지를 어떻게 만드는가"는
hardened-containers 가 알아야 하므로, 레포 분리 시 이 지식을 카탈로그 쪽으로 옮겼다 —
doc/migrations/self-build-images-to-hardened-containers.md
참고.
파일 형식 — <image>.env
<image>는 hardened-containers 레포의 images/<image>/ 디렉토리명과 정확히 같아야 한다
(published.json의 키도 같다).
| 키 | 의미 |
|---|---|
CHART_DIRS |
이 이미지의 태그를 참조하는 차트 버전 디렉토리 (공백 구분, 여러 개 가능) |
TAG_STYLE |
imageName(단일 필드 문자열) | split(registry/repository/tag 분리) |
TAG_BLOCK |
split일 때 태그가 있는 블록의 점 구분 경로 (기본 image) |
CHART_DIRS는 기본적으로 최신 버전 디렉토리 하나만 가리킨다. 차트를
업그레이드할 때 이 값을 교체한다 — 추가가 아니다. 옛 버전은 업그레이드 시점
태그로 동결된 채 카탈로그에 남는다(정적 카탈로그는 "버전 보관소"라 디렉토리 자체는
지우지 않는다 — 다만 자체 빌드 태그 자동 반영 대상에서는 빠진다). 근거:
MEMORY.md의 argo-cd/7.8.11 동결 사례(PR #28) — 차트 버전 갱신은 결국 배포
중인 앱 버전 관리와 묶여 간다. 차트 버전을 언제 올리는지(트리거) 자체는
catalog-update-pipeline SKILL.md
"언제 실행하나" 절 참고.
여러 버전을 의도적으로 병행 추적해야 하는 예외적 케이스(같은 이미지를 쓰는 두
메이저 라인을 동시에 지원해야 하는 경우 등)만 공백으로 여러 디렉토리를 나열한다 —
이 경우 왜 병행이 필요한지 CUSTOM-README.md나 커밋 메시지에 근거를 남긴다.