LabHub
배우기 러닝패스 코스

FDE 캡스톤: 창고가 같은 주문을 세 번 받았다 · 초록불 다음의 한 건 · 실습

1.5.0 은 접수됨을 띄웠지만 창고엔 주문이 없었다

LabHub 에서 이어서 보기

목표

releases/<판> 과 current 심링크로 배포하고, 헬스체크와 스모크 시험을 거쳐 실패하면 직전 판으로 되돌려 기록하는 스크립트를 만든다. 보존 정리에서 current 와 직전 판을 지킨다.

왜 중요한가

헬스체크는 프로세스가 살아 있는지를, 스모크는 업무 한 건이 끝까지 되는지를 묻는다. 고객사의 지난 배포는 앞의 질문만 하고 끝나 밤새 주문을 잃었다.
판을 디렉터리로 나누고 심링크 하나로 전환하면 되돌림도 같은 동작 하나가 된다. 다만 전환하는 순간 current 가 사라지거나, 옛 프로세스가 대신 초록불을 켜거나, 정리 스크립트가 돌아갈 판을 지우면 구조가 있어도 사고가 난다.
채점기는 매번 다른 판 번호로 정상·스모크에서만 깨지는·뜨자마자 죽는·늦게 뜨는 빌드를 만들어 여러분의 스크립트를 실행하고, 로그 문구가 아니라 실제로 응답하는 판과 심링크를 다시 잰다.

예상 60분이다. 기본 세션이 끝나기 전에 +시간으로 연장하자(최대 180분). 세션이 끝나면 /root 의 파일은 사라지니 스크립트는 따로 보관한다.

단계

1. 빌드 orderapp-1.4.0.tar.gz 를 /root/site/releases/1.4.0 에 풀고, /root/site/current 심링크가 그 디렉터리를 가리키게 한다.
2. /root/release/switch.sh ROOT 판 을 만든다. 없는 판은 거부하고, current 가 사라지는 순간 없이 한 번에 전환한다.
3. /root/release/deploy.sh ROOT 빌드 PORT 를 만든다. 풀기·전환·옛 프로세스 교체·헬스체크(version 확인)·스모크 주문·deploy.log 기록까지 정상 빌드로 통과시킨다.
4. deploy.sh 가 스모크에 실패하면 current 를 직전 판으로 되돌리고 그 판을 다시 띄운 뒤 rolled_back·reason smoke 를 기록하고 종료 코드 2 로 끝나게 한다.
5. deploy.sh 의 헬스체크가 뜨자마자 죽는 판은 health 로 되돌리고, 2.5초 늦게 뜨는 정상 판은 기다려서 배포하게 한다. 대기 상한은 10초다.
6. /root/release/prune.sh ROOT KEEP 을 만든다. mtime 최신 KEEP 개를 남기되 current 와 직전 판은 지울 목록에서 뺀다.
7. 네 번 배포(마지막은 스모크 실패)와 보존 1 정리를 이어서 해도 기록·남은 판·응답하는 판이 맞는지 확인한다.
8. 고객의 1.5.0 을 deploy.sh 로 /root/site(포트 8480)에 배포해 결과를 보고, /root/release/incident.json 에 사건을 기록한다.

참고

단계 8개

  1. 첫 판을 손으로 풀고 current 걸기
  2. current 를 한 번에 바꾸는 전환 스크립트
  3. 풀고 바꾸고 띄우고 스모크까지
  4. 스모크가 깨지면 직전 판으로 되돌리기
  5. 죽은 판은 빨리, 늦은 판은 기다려서
  6. 정리하다 돌아갈 판을 지우지 않기
  7. 네 번 배포하고 정리해도 맞는 기록
  8. 고객의 1.5.0 을 배포하고 사건 기록 남기기