Skip to content

ci: 릴리즈 파이프라인 원자화 및 표준/핫픽스 게이트 분리 - #113

Merged
Whale0928 merged 5 commits into
mainfrom
ci/release-pipeline-atomization
Sep 4, 2026
Merged

ci: 릴리즈 파이프라인 원자화 및 표준/핫픽스 게이트 분리#113
Whale0928 merged 5 commits into
mainfrom
ci/release-pipeline-atomization

Conversation

@Whale0928

Copy link
Copy Markdown
Contributor

배경

2026-08-31 릴리즈 사고(run 33374742687). build and push docker imageerror writing layer blob: failed to reserve cache로 08:51:31 실패했고 cosign 서명은 실행조차 안 됐는데, 08:51:49 — 18초 뒤 — argocd-image-updater가 dashboard_latest_production의 새 digest를 감지해 운영에 반영했다. 워크플로는 빨간불인데 미서명 이미지가 운영에 나갔다.

같은 병합에서 run이 두 개 떴다. releases/2026-08-31/2 스냅샷의 구 파일(on: pull_request, job verify-merged-empty-release-pr)과 main의 신규 파일(on: pull_request_target, job verify-merged-release-pr)이 각자 실행됐다.

변경

1. 이미지 공개 원자화 — build-push는 immutable 태그 1개만 push하고 cache-to를 떼어냈다. 그 뒤 sign → verify(기존에 없던 단계) → imagetools create로 채널 태그 승격 → 승격 digest 동등성 assert + 채널 태그 서명 검증. 캐시 export는 맨 뒤로 가고 continue-on-error가 붙었다. additional-tagspromote-tags.

2. 게이트 파일 분리 — 표준과 핫픽스는 불변조건이 정반대다(changed_files==0 vs >=1, head==main vs hotfix/**, 트리 동일 vs merge-tree 결정성). 한 파일에 if로 섞여 있던 것을 갈랐다.

파일 트리거 브랜치
release_pr_merged.yml pull_request_target releases/**
hotfix_pr_merged.yml (신규) pull_request_target hotfixes/**

핫픽스 릴리즈 브랜치를 hotfixes/** 네임스페이스로 옮기면 과거 스냅샷의 branches: ['releases/**'] 필터에 걸리지 않아 중복 실행이 원천 차단된다. 여기에 더해 hotfix_pr_merged.yml은 과거 어떤 스냅샷에도 없는 파일이라 방어선이 이중이다. 배포 본체(deploy_release_applications.yml)는 workflow_call로 두 경로가 공유한다.

release_pr_create.ymlrelease_type=hotfix 모드를 추가했다. 8/31에는 릴리즈 브랜치가 이 워크플로를 거치지 않고 수동 생성됐다.

검증

로컬 레지스트리 + CI와 동일한 cosign v2.2.4 실측:

항목 결과
imagetools create의 digest 보존 승격 digest == 빌드 digest
--tlog-upload=false--insecure-ignore-tlog=true 통과
다른 키쌍 verify no matching signatures 거부
승격된 채널 태그 verify 통과
승격 후 캐시 export 실패 유도 채널 digest 불변 — 8/31 사고 미재현

actionlint findings 0, YAML 파싱 통과, action 구조 검사 통과, 두 게이트 공통 블록 동일성 확인.

남은 것

관련

@Whale0928
Whale0928 merged commit 60130a6 into main Sep 4, 2026
2 checks passed
@Whale0928
Whale0928 deleted the ci/release-pipeline-atomization branch September 4, 2026 06:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants