Skip to content

fix: Need ~/app folder, add mkdir command #9

fix: Need ~/app folder, add mkdir command

fix: Need ~/app folder, add mkdir command #9

Workflow file for this run

# Temporary Single EC2 deployment file
name: Build test
on:
push:
branches:
github-action-test
jobs:
deploy:
runs-on: ubuntu-latest
services:
mysql:
image: mysql:8.0
env:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: testdb
MYSQL_USER: user
MYSQL_PASSWORD: somepassword
ports:
- 3306:3306
options: >-
--health-cmd="mysqladmin ping -h localhost"
--health-interval=10s
--health-timeout=5s
--health-retries=3
steps:
# 1. GitHub 저장소에서 코드 가져오기
- name: Checkout Repository
uses: actions/checkout@v4
# 2. Java 및 Gradle 설정
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'
# 3. Gradle 빌드 수행
- name: Build with Gradle
run: |
chmod +x gradlew
./gradlew build
# Just for build test, not for prod!
env:
SPRING_DATASOURCE_URL: jdbc:mysql://localhost:3306/testdb
SPRING_DATASOURCE_USERNAME: user
SPRING_DATASOURCE_PASSWORD: somepassword
SPRING_JPA_HIBERNATE_DDL_AUTO: create-drop
SPRING_PROFILES_ACTIVE: "prod"
# AWS EC2에 SSH 접속하여 NGINX 설치 및 실행
# - name: Install & Start NGINX
# uses: appleboy/[email protected]
# with:
# host: ${{ secrets.EC2_HOST }}
# username: ${{ secrets.EC2_USER }}
# key: ${{ secrets.EC2_SSH_PRIVATE_KEY }}
# script: |
# echo "Checking if NGINX is installed..."
# if ! command -v nginx &> /dev/null
# then
# echo "NGINX not found. Installing..."
# sudo apt update && sudo apt install -y nginx
# else
# echo "NGINX is already installed."
# fi
# echo "Starting NGINX..."
# sudo systemctl enable nginx
# sudo systemctl start nginx
# sudo systemctl status nginx
# NGINX 리버스 프록시 설정
# - name: Configure NGINX Reverse Proxy
# uses: appleboy/[email protected]
# with:
# host: ${{ secrets.EC2_HOST }}
# username: ${{ secrets.EC2_USER }}
# key: ${{ secrets.EC2_SSH_PRIVATE_KEY }}
# script: |
# echo "Setting up NGINX reverse proxy..."
# sudo bash -c 'cat > /etc/nginx/sites-available/default <<EOF
# server {
# listen 80;
# server_name _;
# location / {
# proxy_pass http://localhost:8080/;
# proxy_set_header Host \$host;
# proxy_set_header X-Real-IP \$remote_addr;
# proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
# proxy_set_header X-Forwarded-Proto \$scheme;
# }
# }
# EOF'
# sudo nginx -t && sudo systemctl restart nginx
- name: Create .env file on EC2
uses: appleboy/[email protected]
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USER }}
key: ${{ secrets.EC2_SSH_PRIVATE_KEY }}
script: |
mkdir ~/app
echo "SPRING_DATASOURCE_URL=${{ secrets.SPRING_DATASOURCE_URL }}" > ~/app/.env
echo "SPRING_DATASOURCE_USERNAME=${{ secrets.SPRING_DATASOURCE_USERNAME }}" >> ~/app/.env
echo "SPRING_DATASOURCE_PASSWORD=${{ secrets.SPRING_DATASOURCE_PASSWORD }}" >> ~/app/.env
echo "SPRING_PROFILES_ACTIVE=prod" >> ~/app/.env
chmod 600 ~/app/.env
# 기존 애플리케이션 종료
- name: Stop running application on EC2
uses: appleboy/[email protected]
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USER }}
key: ${{ secrets.EC2_SSH_PRIVATE_KEY }}
script: |
echo "Stopping existing application..."
LATEST_JAR=$(ls -t ~/app/*.jar | head -n 1)
JAR_NAME=$(basename "$LATEST_JAR")
PID=$(pgrep -f "java -jar ~/app/$JAR_NAME") || echo "No running process found."
if [ -n "$PID" ]; then
echo "Killing process $PID..."
kill -9 $PID
fi"
# 6. 빌드된 JAR 파일을 EC2로 업로드
- name: Upload JAR to EC2
uses: appleboy/[email protected]
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USER }}
key: ${{ secrets.EC2_SSH_PRIVATE_KEY }}
source: "build/libs/*-SNAPSHOT.jar"
target: "~/app/"
- name: Find the latest JAR file
run: |
LATEST_JAR=$(ls -t ~/app/*-SNAPSHOT-*.jar | head -n 1)
echo "LATEST_JAR=$LATEST_JAR" >> $GITHUB_ENV
- name: Start application on EC2
uses: appleboy/[email protected]
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USER }}
key: ${{ secrets.EC2_SSH_PRIVATE_KEY }}
script: |
echo "Starting new application..."
export $(grep -v '^#' ~/app/.env | xargs) # 환경 변수 로드
nohup java -jar ~/app/*.jar > ~/app/app.log 2>&1 &