./.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