Skip to content

refactor: 채팅 프롬프팅 개선 #94

refactor: 채팅 프롬프팅 개선

refactor: 채팅 프롬프팅 개선 #94

Workflow file for this run

name: CI/CD
on:
push:
branches: [ develop ]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Make gradlew executable
run: chmod +x gradlew
- name: Set up JDK
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: Build with Gradle
run: ./gradlew clean bootJar -x test
- name: Show artifact
run: ls -la build/libs/
- name: Copy JAR to EC2
uses: appleboy/scp-action@v0.1.5
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_KEY }}
port: 22
source: "build/libs/*-SNAPSHOT.jar"
target: "/home/ubuntu/app"
rm: true
overwrite: true
- name: Copy docker-compose.yml to EC2
uses: appleboy/scp-action@v0.1.5
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_KEY }}
port: 22
source: "docker-compose.yml"
target: "/home/ubuntu/app"
overwrite: true
- name: Deploy via SSH
uses: appleboy/ssh-action@v0.1.5
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_KEY }}
script: |
set -euo pipefail
cd /home/ubuntu/app
echo "=== Stop containers first ==="
docker compose -p myapp-stack down --remove-orphans --volumes || true
echo "=== Clean old images and containers ==="
docker rmi myapp:latest || true
docker system prune -f
echo "=== Rename JAR ==="
rm -f click-0.0.1-SNAPSHOT.jar app.jar
cp build/libs/*-SNAPSHOT.jar click-0.0.1-SNAPSHOT.jar
echo "New JAR size: $(ls -lh click-0.0.1-SNAPSHOT.jar | awk '{print $5}')"
echo "=== Create Dockerfile ==="
TIMESTAMP=$(date +%s)
cat > Dockerfile <<EOF
FROM openjdk:17-jdk
WORKDIR /app
COPY click-0.0.1-SNAPSHOT.jar app.jar
ENV BUILD_TIME=$TIMESTAMP
ENTRYPOINT ["sh","-c","java \$JAVA_OPTS -jar /app/app.jar"]
EOF
echo "=== Build new image with no cache ==="
docker build --no-cache --pull -t myapp:latest .
echo "Image built successfully"
echo "=== Create .env file ==="
cat > .env <<ENV
SERVER_HOST=${{ secrets.SERVER_HOST }}
FRONTEND_URL=${{ secrets.FRONTEND_URL }}
DB_URL=${{ secrets.DB_URL }}
DB_USERNAME=${{ secrets.DB_USERNAME }}
DB_PASSWORD=${{ secrets.DB_PASSWORD }}
KAKAO_CLIENT_ID=${{ secrets.KAKAO_CLIENT_ID }}
KAKAO_CLIENT_SECRET=${{ secrets.KAKAO_CLIENT_SECRET }}
AWS_ACCESS_KEY=${{ secrets.AWS_ACCESS_KEY }}
AWS_SECRET_KEY=${{ secrets.AWS_SECRET_KEY }}
AWS_S3_BUCKET=${{ secrets.AWS_S3_BUCKET }}
GOOGLE_API_KEY=${{ secrets.GOOGLE_API_KEY }}
ENV
echo "=== Start containers ==="
docker compose -p myapp-stack --env-file .env up -d --force-recreate
echo "=== Verify deployment ==="
sleep 10
docker compose -p myapp-stack ps
echo "=== Check JAR file in containers ==="
docker exec myapp-local stat /app/app.jar || echo "Local container file check failed"
docker exec myapp-prod stat /app/app.jar || echo "Prod container file check failed"
echo "=== Final logs ==="
docker compose -p myapp-stack logs --tail=30 myapp-prod
docker compose -p myapp-stack logs --tail=30 myapp-local