Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 17 additions & 5 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,15 @@ name: CI/CD Pipeline

on:
push:
branches: [ "main", "develop" ] # main과 develop 브랜치에 push될 때 작동

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

develop는 사용이 없어서 CICD 범위에서 제외했습니다

branches: [ "main" ] # main에 push될 때 작동
workflow_dispatch:

# 같은 서버(humix-prod)에 배포가 동시에 실행되면 컨테이너 교체 중 이름 충돌이 나므로 한 번에 하나만 실행한다.
# 진행 중인 배포는 도중에 끊지 않고, 대기 중이던 이전 실행은 최신 실행으로 대체된다 (마지막 커밋이 항상 반영됨).
concurrency:
group: deploy-prod
cancel-in-progress: false

jobs:
deploy:
runs-on: ubuntu-latest
Expand Down Expand Up @@ -65,13 +71,19 @@ jobs:
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_SSH_KEY }}
script: |
set -e
cd /home/${{ secrets.EC2_USERNAME }}/humix-${{ env.ENV_NAME }}
# 기존 컨테이너를 내리고, 새 이미지를 빌드하여 백그라운드에서 실행
# 실패해도 아래 정리는 실행해야 하므로 종료 코드를 저장해 두었다가 마지막에 반환한다.
# (그렇지 않으면 마지막 prune 명령의 성공이 단계 전체를 성공으로 만들어 배포 실패가 가려진다)
deploy_status=0
if docker compose version >/dev/null 2>&1; then
docker compose --project-name humix-${{ env.ENV_NAME }} --env-file .env up --build -d
docker compose --project-name humix-${{ env.ENV_NAME }} --env-file .env up --build -d || deploy_status=$?
else
docker-compose --project-name humix-${{ env.ENV_NAME }} --env-file .env up --build -d
docker-compose --project-name humix-${{ env.ENV_NAME }} --env-file .env up --build -d || deploy_status=$?
fi
# 사용하지 않는 이전 도커 이미지 및 빌드 캐시 전면 정리 (8GB 용량 부족 대비)
docker image prune -a -f
docker builder prune -a -f
# 정리 실패는 배포 결과에 영향을 주지 않도록 한다
docker image prune -a -f || true
docker builder prune -a -f || true
exit $deploy_status
Loading