From 69ecb8ecc7b37832f838485f3bfc422795ba3f4c Mon Sep 17 00:00:00 2001 From: Kim Seoyeon Date: Mon, 12 Oct 2026 19:14:41 +0900 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20=EB=B0=B0=ED=8F=AC=20=EC=9B=8C?= =?UTF-8?q?=ED=81=AC=ED=94=8C=EB=A1=9C=EA=B0=80=20=EC=8B=A4=ED=8C=A8?= =?UTF-8?q?=EB=A5=BC=20=EC=84=B1=EA=B3=B5=EC=9C=BC=EB=A1=9C=20=ED=91=9C?= =?UTF-8?q?=EC=8B=9C=ED=95=98=EA=B3=A0=20=EB=8F=99=EC=8B=9C=20=EB=B0=B0?= =?UTF-8?q?=ED=8F=AC=EA=B0=80=20=EC=B6=A9=EB=8F=8C=ED=95=98=EB=8D=98=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 서버에서 docker compose up 이 실패해도 마지막 prune 명령이 성공해 Actions 에는 성공으로 표시되었고, main 에 연달아 머지하면 배포가 동시에 실행되어 컨테이너 이름 충돌이 났다. 이 때문에 #43, #45, #47 이 운영에 반영되지 않았다. - concurrency(group: deploy-prod, cancel-in-progress: false) 추가: 배포는 한 번에 하나만 실행하고, 대기 중이던 이전 실행은 최신 실행으로 대체 - 서버 스크립트에 set -e 추가, docker compose up 의 종료 코드를 저장했다가 마지막에 반환해 실패가 단계 실패로 전달되도록 수정. 실패해도 prune 은 실행해 디스크를 비우고, prune 실패는 배포 결과에 영향을 주지 않음 Co-Authored-By: Claude Sonnet 5.5 --- .github/workflows/deploy.yml | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 65a4a99..76131d5 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -5,6 +5,12 @@ on: branches: [ "main", "develop" ] # main과 develop 브랜치에 push될 때 작동 workflow_dispatch: +# 같은 서버(humix-prod)에 배포가 동시에 실행되면 컨테이너 교체 중 이름 충돌이 나므로 한 번에 하나만 실행한다. +# 진행 중인 배포는 도중에 끊지 않고, 대기 중이던 이전 실행은 최신 실행으로 대체된다 (마지막 커밋이 항상 반영됨). +concurrency: + group: deploy-prod + cancel-in-progress: false + jobs: deploy: runs-on: ubuntu-latest @@ -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 \ No newline at end of file + # 정리 실패는 배포 결과에 영향을 주지 않도록 한다 + docker image prune -a -f || true + docker builder prune -a -f || true + exit $deploy_status \ No newline at end of file From 56dd3c60828c2a1e4814ac791924298f586a9294 Mon Sep 17 00:00:00 2001 From: Seohyun Kim Date: Wed, 14 Oct 2026 01:24:59 +0900 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20CICD=20=EC=9E=91=EB=8F=99=20?= =?UTF-8?q?=EB=B8=8C=EB=9E=9C=EC=B9=98=EB=A5=BC=20main=EC=9C=BC=EB=A1=9C?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 76131d5..ed89c7b 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -2,7 +2,7 @@ name: CI/CD Pipeline on: push: - branches: [ "main", "develop" ] # main과 develop 브랜치에 push될 때 작동 + branches: [ "main" ] # main에 push될 때 작동 workflow_dispatch: # 같은 서버(humix-prod)에 배포가 동시에 실행되면 컨테이너 교체 중 이름 충돌이 나므로 한 번에 하나만 실행한다.