spring-boot-with-nohup

./.github/workflows/deploy.yml

name: CI/CD Deploy

on:
  pull_request:
    branches:
      - main
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Set up JDK
        uses: actions/setup-java@v3
        with:
          distribution: 'temurin'
          java-version: '21'

      - name: Setup SSH
        run: |
          mkdir -p ~/.ssh
          echo "${{ secrets.SERVER_SSH_KEY }}" > ~/.ssh/id_rsa
          chmod 600 ~/.ssh/id_rsa
          ssh-keyscan -H $DEPLOY_SERVER >> ~/.ssh/known_hosts
        env:
          DEPLOY_SERVER: ${{ secrets.GAME_SERVER_HOST }}

      - name: Run deploy script
        env:
          DATABASE_PW: ${{ secrets.DATABASE_PW }}
          DATABASE_URL: ${{ secrets.DATABASE_URL }}
          DATABASE_USER: ${{ secrets.DATABASE_USER }}
        run: bash remote-deploy.sh

./deploy.sh

#!/bin/bash
set -e

# build
./gradlew clean build

DEPLOY_PATH=deploy/word-online-server

PROJECT_ROOT=$(pwd)
BUILD_PATH=$(ls $PROJECT_ROOT/build/libs/*.jar)
JAR_NAME=$(basename $BUILD_PATH)

# Copy To Server
scp $BUILD_PATH $DEPLOY_USER@$DEPLOY_SERVER:$DEPLOY_PATH

# Run Application
ssh $DEPLOY_USER@$DEPLOY_SERVER << EOF
CURRENT_PID=\$(pgrep -f $JAR_NAME)

if [ -z "\$CURRENT_PID" ]
then
  echo "No running process"
  sleep 1
else
  echo "Stopping process \$CURRENT_PID"
  kill -15 \$CURRENT_PID
  sleep 5
fi

export DATABASE_PW=$DATABASE_PW
export DATABASE_URL=$DATABASE_URL
export DATABASE_USER=$DATABASE_USER

nohup java -jar $DEPLOY_PATH/$JAR_NAME > $DEPLOY_PATH/app.log 2>&1 &
EOF