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: 14 additions & 8 deletions .github/workflows/CI-CD_Pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -250,8 +250,10 @@ jobs:
echo "===== 기존 컨테이너 종료 & 제거 ====="
docker stop app1 2>/dev/null || true
docker rm app1 2>/dev/null || true
# EC2 내부에서 prod.env 파일 생성
cat > /home/ec2-user/prod.env << 'EOF'

# EC2 내부에서 prod.env 파일 생성 (기존 파일 있으면 덮어쓰기)
mkdir -p /home/ec2-user/configs
cat > /home/ec2-user/configs/prod.env << 'EOF'
SPRING_PROFILES_ACTIVE=prod

CUSTOM_JWT_SECRET_KEY=${{ secrets.JWT_SECRET_KEY }}
Expand All @@ -261,7 +263,8 @@ jobs:
PROD_DATASOURCE_DRIVER=com.mysql.cj.jdbc.Driver
PROD_DATASOURCE_USERNAME=root
PROD_DATASOURCE_PASSWORD=${{ secrets.DB_PASSWORD }}
PROD_JPA_HIBERNATE_DDL_AUTO=update
# 추후 validate 변경
PROD_JPA_HIBERNATE_DDL_AUTO=update

PROD_REDIS_HOST=redis_1
PROD_REDIS_PORT=6379
Expand All @@ -272,23 +275,26 @@ jobs:
send_email_password=${{ secrets.EMAIL_PASSWORD }}
EOF

# 파일 권한 최소화
chmod 600 /home/ec2-user/configs/prod.env

# EC2에서 GHCR 로그인
echo "${{ secrets.GHCR_PAT }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin

# 최신 이미지 pull & 컨테이너 실행
docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/${{ env.DOCKER_IMAGE_NAME }}:latest
docker stop app1 2>/dev/null || true
docker rm app1 2>/dev/null || true
docker run --env-file /home/ec2-user/prod.env \

echo "===== 새로운 컨테이너 실행 ====="
docker run --env-file /home/ec2-user/configs/prod.env \
-d --name app1 \
--network common \
--restart unless-stopped \
-p 8080:8080 \
${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/${{ env.DOCKER_IMAGE_NAME }}:latest
echo "===== 새 컨테이너 로그 출력 ====="
sleep 5
docker logs --tail=100 app1 || true

echo "===== 배포 완료 ====="
# dangling image 정리 + .env 삭제
# dangling image 정리
docker rmi $(docker images -f "dangling=true" -q) || true
rm -f /home/ec2-user/prod.env