배포 자동화
4. 응용 변형 예제
4.1 stage 를 먼저 거쳐 prod 로 승격
deploy_release 5 stage OK 로 stage 에 먼저 배포하고 수동 확인을 거친 뒤, 같은 산출물을 deploy_release 12 prod OK 로 prod 에 배포합니다. 빌드 산출물은 재사용하고 환경만 바꾸는 것이 핵심입니다.
4.2 헬스체크 재시도 로직
재시작 직후에는 앱이 뜨는 중이라 헬스체크가 바로 실패할 수 있습니다. for i in 1 2 3; do ... && break; sleep 1; done 형태로 짧게 재시도한 뒤에만 실패로 판정합니다.
4.3 보관 릴리스 개수 제한
ls -1 releases | sort -n | head -n -5 | while read -r old; do
[ "$old" = "$(cat current)" ] || rm -rf "releases/$old"
done최근 5개를 남기고 오래된 릴리스를 지우되, current 와 같은 번호는 건너뜁니다.
4.4 배포 실패 알림
echo "배포 실패: release=$n env=$env" | mail -s "배포 실패" ops@example.com메일 대신 메신저 웹훅으로 보내는 팀도 많습니다. 원리는 실패 시 종료 코드를 잡아 알림 명령 한 줄을 추가하는 것입니다.
4.5 GitHub Actions 승인 후 배포 워크플로
jobs:
deploy-prod:
environment: production
steps:
- run: ssh deploy@prod-1 "bash /opt/app/deploy.sh 12"environment: production 에 필수 리뷰어가 걸려 있으면 이 잡은 승인 전까지 대기 상태로 멈춥니다. 승인 후 실행되는 run 줄은 이 레슨의 deploy_release 와 같은 절차를 원격에서 호출합니다.