101 lines
3.6 KiB
YAML
101 lines
3.6 KiB
YAML
name: Deploy blog-frontend
|
|
run-name: ${{ gitea.actor }} is deploying Blog
|
|
|
|
# 1. 언제 실행할까요? -> main 브랜치에 코드가 푸시될 때
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
|
|
jobs:
|
|
build-and-deploy:
|
|
runs-on: blog-frontend
|
|
steps:
|
|
# 👇 [추가] Docker CLI 설치 단계
|
|
- name: Install Dependencies
|
|
run: |
|
|
apt-get update
|
|
apt-get install -y git
|
|
|
|
# Docker CLI 수동 설치 (호스트 버전 호환성 위해)
|
|
curl -fsSL https://download.docker.com/linux/static/stable/x86_64/docker-26.1.3.tgz -o docker.tgz
|
|
|
|
tar xzvf docker.tgz
|
|
mv docker/docker /usr/local/bin/
|
|
|
|
rm -r docker docker.tgz
|
|
|
|
# 설치 확인
|
|
docker --version
|
|
git --version
|
|
|
|
- name: Clone Repository
|
|
# 환경 변수로 필요한 값들을 주입받습니다.
|
|
env:
|
|
GITEA_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
GITEA_SERVER_URL: ${{ gitea.server_url }}
|
|
GITEA_REPO: ${{ gitea.repository }}
|
|
run: |
|
|
# 현재 디렉토리가 비어있는지 확인
|
|
ls -al
|
|
|
|
# 쉘 스크립트로 URL 가공 (http://, https:// 제거)
|
|
# sed 명령어를 사용하여 프로토콜 부분을 안전하게 제거합니다.
|
|
CLEAN_URL=$(echo "$GITEA_SERVER_URL" | sed 's~http://~~g' | sed 's~https://~~g')
|
|
|
|
echo "Cloning from: $CLEAN_URL/$GITEA_REPO.git"
|
|
|
|
# 가공된 URL과 토큰을 사용하여 클론 수행
|
|
git clone "https://user:${GITEA_TOKEN}@${CLEAN_URL}/${GITEA_REPO}.git" .
|
|
|
|
# 클론 후 파일 목록 확인 (디버깅)
|
|
echo "📂 File List after clone:"
|
|
ls -al
|
|
|
|
- name: Build Docker Image
|
|
run: |
|
|
echo "Building Docker image..."
|
|
|
|
# 파일 존재 여부 재확인 (대소문자 이슈 처리)
|
|
if [ -f Dockerfile ]; then
|
|
DOCKERFILE_NAME="Dockerfile"
|
|
elif [ -f DockerFile ]; then
|
|
DOCKERFILE_NAME="DockerFile"
|
|
else
|
|
echo "❌ Dockerfile not found!"
|
|
exit 1
|
|
fi
|
|
|
|
echo "✅ Found $DOCKERFILE_NAME"
|
|
|
|
# -f 옵션으로 찾은 파일명을 지정합니다.
|
|
docker build \
|
|
-f $DOCKERFILE_NAME \
|
|
--build-arg NEXT_PUBLIC_API_URL=https://blogserver.wypark.me \
|
|
-t blog-frontend:latest .
|
|
|
|
# 단계 3: 기존 컨테이너를 끄고 새 컨테이너를 실행합니다.
|
|
- name: Deploy Container
|
|
run: |
|
|
echo "Deploying new container..."
|
|
|
|
# 기존에 돌고 있는 'blog-frontend' 컨테이너가 있다면 중지하고 삭제합니다.
|
|
# (|| true는 에러가 나도 무시하고 다음 줄로 넘어가라는 뜻입니다)
|
|
docker stop blog-frontend || true
|
|
docker rm blog-frontend || true
|
|
|
|
# 새 이미지를 기반으로 컨테이너를 실행합니다.
|
|
# -d: 백그라운드 실행
|
|
# -p 3005:3000: 호스트의 3005번 포트를 컨테이너의 3000번 포트에 연결 (NPM용)
|
|
# --restart unless-stopped: 서버 재부팅 시 자동 실행
|
|
docker run -d \
|
|
--name blog-frontend \
|
|
--restart unless-stopped \
|
|
-p 3005:3000 \
|
|
-e NEXT_PUBLIC_API_URL=https://blogserver.wypark.me \
|
|
blog-frontend:latest
|
|
|
|
# 단계 4: 빌드 과정에서 생긴 임시 이미지들을 청소합니다. (용량 관리)
|
|
- name: Cleanup Old Images
|
|
run: |
|
|
docker image prune -f |