[INFRA-08] deploy-prod.yml — QA 게이트 + 롤백 워크플로
작업 내용 (설계 의도)
변경 사항
근거 TDD: ../TDD.md “QA 게이트 연동 지점”, “실패 경로”, “상태 전이 표”. ADR-003/004. FR-4/7/8, NFR(0-bypass). prod 배포를 private-qa PASS 게이트 뒤에 둔다. dev 워크플로(INFRA-07)와 다른 파일 — 같은 wave 병렬 안전.
- 트리거:
workflow_dispatch(입력image_tag옵션 — 미지정 시 main HEAD, 지정 시 롤백). - job1
qa-gate(self-hosted runner):qa/verdict.json3중 검증 — ①status==PASS②commit==배포 SHA(stale 차단) ③ 파일·형식 유효. verdict 원문을 artifact +$GITHUB_STEP_SUMMARY에 기록(FR-7). 실패 시 job fail → 배포 미실행. - job2
deploy:needs: qa-gate+environment: production(필수 승인 보호) →scripts/deploy.sh prod <sha>. health 실패 시rollback.sh prod <prev>후속. concurrency: deploy-prod그룹.- 롤백 경로:
workflow_dispatchimage_tag=<prev_sha>→ qa-gate 재검증 후deploy.sh prod <prev_sha>(5분 내, NFR). - 실패·게이트 차단 시
source=deployment통지(⑩ 연동).
롤백: prod 배포 실패 → rollback.sh prod <prev> 자동. 게이트 오작동 → 승인 보호 유지한 채 워크플로 입력으로 임시 조정.
의존
- INFRA-01 (Dockerfile), INFRA-03 (deploy.sh/rollback.sh), INFRA-06 (prod override)
다이어그램
처리 흐름
sequenceDiagram participant Dev as 개발자 participant Wf as deploy-prod.yml participant Gate as qa-gate job participant Rn as self-hosted runner Dev->>Wf: workflow_dispatch Wf->>Gate: verdict.json 3중 검증 Gate-->>Wf: PASS+SHA일치 → 통과 Wf->>Rn: environment 승인 → deploy.sh prod <sha> Rn-->>Wf: health UP / 실패 시 rollback.sh
테스트 케이스
actionlint가 error 0건이다- verdict
status=PASS+ SHA 일치 시 deploy job이 진행된다 - verdict
FAIL이면 qa-gate가 실패하고 deploy job이 미실행된다 - verdict SHA가 배포 대상과 불일치(stale)면 차단된다
- verdict 파일 부재 시 차단된다(NFR 0-bypass)
- deploy job이
environment: production승인 보호를 갖는다 image_tag입력으로 이전 태그 롤백을 트리거할 수 있다- prod health 실패 시
rollback.sh후속 스텝이 실행된다 - qa-gate가 verdict 원문을 artifact·step summary에 기록한다(FR-7)