Skip to content

[Fix] 배포 워크플로가 실패를 성공으로 표시하고 동시 배포가 충돌하던 문제 수정 (#48) - #49

Merged
seohyun27 merged 2 commits into
mainfrom
bug/48-deploy-workflow
Oct 13, 2026
Merged

seohyun27 merged 2 commits into
mainfrom
bug/48-deploy-workflow

Conversation

@seoyeoki

Copy link
Copy Markdown
Contributor

개요

배포 워크플로(CI/CD Pipeline, deploy.yml)가 서버에서 docker compose up이 실패해도 Actions에는 성공으로 표시되고, 연달아 머지하면 배포가 동시에 실행되어 충돌하던 문제를 수정합니다. 2026-10-12에 #43, #45, #47을 머지했는데 운영에는 반영되지 않았고 Swagger 배포 일시가 바뀌지 않은 원인입니다.

Closes #48

원인

Actions 로그(7. EC2 접속 후 Docker 실행)에서 확인한 내용입니다.

배포 (머지) 로그 Actions 표시
#47 No space left on device (humix-ai-cpu 이미지 빌드 중) → failed to solve success
#45, #43 (동시 실행) Conflict. The container name "/0f7482c38e11_humix-backend-prod" is already in use success
  • 서버 접속 스크립트가 중간 실패에서 멈추지 않고, 마지막 명령(prune)이 항상 성공해서 단계 전체가 성공으로 끝남
  • concurrency 설정이 없어 연달아 머지하면 같은 서버에 배포 두 건이 동시에 컨테이너를 교체

변경 사항 (.github/workflows/deploy.yml)

  • concurrency 추가 (group: deploy-prod, cancel-in-progress: false)
    • 배포는 한 번에 하나만 실행. 진행 중인 배포는 끊지 않고, 대기 중이던 이전 실행은 최신 실행으로 대체되므로 마지막 커밋이 항상 반영됨
    • main과 develop 푸시는 둘 다 ENV_NAME=prod로 같은 서버에 배포하므로 그룹을 하나로 묶음
  • 서버 쪽 docker compose up 실패가 단계 실패로 전달됨
    • 종료 코드를 저장해 두고 마지막에 exit로 반환. set -e를 추가해 cd 실패 등도 즉시 중단
    • 배포가 실패해도 prune은 그대로 실행해서 디스크를 비움 (단순히 set -e만 쓰면 실패 시 정리를 건너뛰어 다음 배포가 디스크 부족으로 막히기 쉬움)
    • prune 자체의 실패는 배포 결과에 영향을 주지 않도록 || true

영향 / 주의

범위 외

  • 매 배포마다 AI 서버 이미지(humix-ai-cpu)까지 처음부터 다시 빌드해 디스크를 크게 쓰는 문제 (서버 디스크 크기 확인 후 별도 검토)
  • develop 푸시가 운영에 배포되는 점, @master로 고정된 액션 버전

테스트

  • deploy.yml YAML 문법 검증 (Ruby YAML 파서), 단계 7 스크립트 sh -n 문법 검사
  • 가짜 docker 명령으로 스크립트 동작 검증 (종료 코드 / prune 실행 횟수)
시나리오 종료 코드 prune 실행
배포 성공 0 2
up 실패(17) 17 (기존 스크립트는 0) 2
배포 성공 + prune 실패 0 2
docker compose 없음 → docker-compose 성공 0 2
docker-compose 실패(5) 5 2
  • 실제 GitHub Actions 환경과 EC2에서 실행하는 것은 확인하지 못했습니다. concurrency의 대기·대체 동작은 GitHub 문서 기준이고, 머지 후 연달아 머지해 확인이 필요합니다.

🤖 Generated with Claude Code

seoyeoki and others added 2 commits October 12, 2026 19:14
서버에서 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 <noreply@anthropic.com>

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 범위에서 제외했습니다

@seohyun27
seohyun27 merged commit 7ad69ff into main Oct 13, 2026
1 check passed
@seohyun27

Copy link
Copy Markdown
Contributor

서버 쪽 조치 완료했습니다.

원인

  • 연속 배포 충돌로 Created 상태 컨테이너가 남아 이후 배포가 이름 충돌로 실패
  • 디스크 8GB 중 여유 1.2GB로 이미지 빌드 공간 부족

조치

확인 결과

  • 백엔드·AI 서버 컨테이너 재생성 및 Started ApiApplication 확인
  • DB 테이블 4개 자동 생성 확인 (humming, melody_score, member, music_generation)
  • 디스크 여유 14GB

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Fix] 배포 워크플로가 실패해도 성공으로 표시되고 동시 배포가 충돌함

2 participants