diff --git a/.github/workflows/sbom.yml b/.github/workflows/sbom.yml index ab25cc3..174bbd8 100644 --- a/.github/workflows/sbom.yml +++ b/.github/workflows/sbom.yml @@ -32,7 +32,7 @@ jobs: timeout-minutes: 120 container: # helm+trivy+python3+bash+git 보유 이미지. scripts/pipeline/Dockerfile 로 빌드해 푸시한 뒤 - # Repo Variable SBOM_PIPELINE_IMAGE 에 그 태그를 지정한다. (예: docker.io/paasup/sbom-pipeline:latest — + # Repo Variable SBOM_PIPELINE_IMAGE 에 그 태그를 지정한다. (예: docker.io/paasup/sbom-pipeline:20260820 — # 재빌드/네임스페이스 전환은 별도 수동 작업, MEMORY.md 참고) image: ${{ vars.SBOM_PIPELINE_IMAGE }} env: diff --git a/doc/sbom-pipeline.md b/doc/sbom-pipeline.md index 9244285..32d78c4 100644 --- a/doc/sbom-pipeline.md +++ b/doc/sbom-pipeline.md @@ -90,7 +90,7 @@ SBOM 생성 실패는 대부분 **사설/미인증 레지스트리이거나 대 ```bash docker run --rm -v "$PWD:/repo" -w /repo \ -e TRIVY_CACHE_DIR=/repo/sbom-out/cache -e DOCKER_CONFIG=/repo/sbom-out/.docker \ - docker.io/wbsong111/sbom-pipeline:latest bash -c ' + docker.io/paasup/sbom-pipeline:20260820 bash -c ' bash scripts/pipeline/extract-helm-images.sh manifests/helm sbom-out bash scripts/pipeline/generate-sbom.sh sbom-out/images_final.tsv sbom-out # 인증: DOCKER_CONFIG/TRIVY_USERNAME bash scripts/pipeline/scan-sbom.sh sbom-out @@ -105,7 +105,7 @@ docker run --rm -v "$PWD:/repo" -w /repo \ | 베이스 | `debian:stable-slim` (**glibc**) | | 포함 도구 | `helm`(v3) · `trivy` · `python3` · `bash` · `git` | | 아키텍처 | **linux/amd64** (GitHub 러너와 일치) | -| 현재 이미지 | `docker.io/wbsong111/sbom-pipeline:latest` (public) — `paasup` 네임스페이스 이전 미완료(`MEMORY.md`) | +| 현재 이미지 | `docker.io/paasup/sbom-pipeline:20260820` (public) | > **glibc(debian) 필수**: GitHub Actions 의 `container:` 안에서 `actions/checkout`·`upload-artifact` > (node 기반)가 동작하려면 glibc 이거나 node 가 있어야 한다. `aquasec/trivy` 같은 **alpine(musl) @@ -113,7 +113,7 @@ docker run --rm -v "$PWD:/repo" -w /repo \ ```bash docker buildx build --platform linux/amd64 \ - -t docker.io/paasup/sbom-pipeline:latest \ + -t docker.io/paasup/sbom-pipeline:$(date -u +%Y%m%d) \ -f scripts/pipeline/Dockerfile --push scripts/pipeline ``` @@ -220,7 +220,7 @@ Repo Secret `CVE_API_KEY`). | 종류 | 이름 | 용도 | |------|------|------| -| **Variable** | `SBOM_PIPELINE_IMAGE` | 실행 이미지 태그 (예: `docker.io/wbsong111/sbom-pipeline:latest`) | +| **Variable** | `SBOM_PIPELINE_IMAGE` | 실행 이미지 태그 (예: `docker.io/paasup/sbom-pipeline:20260820`) | | Secret | `DOCKERHUB_USER` / `DOCKERHUB_TOKEN` | **docker.io + docker.getcollate.io rate limit 회피**. getcollate(openmetadata)는 Docker Hub 프록시라 익명 pull 시 rate limit(TOOMANYREQUESTS)에 걸림 → Docker Hub 자격증명으로 인증. `build-image.yml` 의 push 에도 같은 시크릿을 쓴다 | | Secret | `NGC_API_KEY` | **nvcr.io 인증**(NVIDIA nemo/nim — 없으면 pull 불가) | | Secret | `CVE_API_KEY` | `cve-edge-post.yml` 의 외부 엔드포인트 인증 | diff --git a/scripts/pipeline/Dockerfile b/scripts/pipeline/Dockerfile index b232fee..e5825fe 100644 --- a/scripts/pipeline/Dockerfile +++ b/scripts/pipeline/Dockerfile @@ -12,8 +12,12 @@ # # 빌드 & 푸시 (amd64 필수 — GitHub 러너가 amd64): # docker buildx build --platform linux/amd64 \ -# -t docker.io//sbom-pipeline:latest -f scripts/pipeline/Dockerfile --push scripts/pipeline -# # 이후: gh variable set SBOM_PIPELINE_IMAGE --body docker.io//sbom-pipeline:latest +# -t docker.io/paasup/sbom-pipeline:$(date -u +%Y%m%d) -f scripts/pipeline/Dockerfile --push scripts/pipeline +# # 이후: gh variable set SBOM_PIPELINE_IMAGE --body docker.io/paasup/sbom-pipeline:<태그> +# +# 롤링 태그(:latest)를 쓰지 않는다 — helm/trivy 를 빌드 시점 최신으로 설치하므로 같은 +# Dockerfile 이 매번 다른 이미지를 낸다. 날짜 태그가 "무엇으로 스캔했는지" 의 기록이다. +# 변수가 전체 ref 를 담으므로 고정 태그를 써도 워크플로 수정이 필요 없다. # ============================================================================= FROM debian:stable-slim