Skip to content

CD

CD #74

Workflow file for this run

name: CD
on:
workflow_run:
workflows: ["CI with Gradle"]
types: [completed]
branches: [main]
permissions:
contents: read
env:
IMAGE: ${{ secrets.DOCKER_USERNAME }}/tokbaro
DOMAIN: tokbaro.com
EMAIL: tokbaro.connect@gmail.com
jobs:
deploy:
name: Deploy to Server
runs-on: ubuntu-latest
steps:
- name: Deploy to Server
uses: appleboy/ssh-action@v1.2.0
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_SSH_KEY }}
port: 22
script: |
# 1. 서버에 있는 프로젝트 디렉토리로 이동합니다.
cd /home/${{ secrets.SERVER_USER }}/BackEnd
# 2. 이전 배포에서 실행 중이던 컨테이너가 있다면 모두 종료하여 포트 충돌을 방지합니다.
echo "Stopping all running containers..."
docker-compose down
# 3. docker-compose.yml 같은 설정 파일 변경을 반영하기 위해 git pull을 실행합니다.
echo "Pulling latest configuration files..."
git pull origin main
# 4. GitHub Secret으로부터 .env 파일을 생성합니다.
echo "Creating .env file..."
echo "${{ secrets.ENV_FILE }}" > .env
echo "DOCKER_IMAGE=${{ env.IMAGE }}:latest" >> .env
# 5. ci.yml에서 빌드한 최신 Docker 이미지를 pull 받습니다.
echo "Pulling latest docker image from registry..."
docker-compose pull
# 6. 모든 서비스를 백그라운드에서 시작합니다.
echo "Starting all services..."
docker-compose up -d
# 7. 불필요한 Docker 이미지를 정리합니다.
echo "Pruning unused docker images..."
docker image prune -f