Skip to content

chore: gemini 모델 변경 #114

chore: gemini 모델 변경

chore: gemini 모델 변경 #114

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 ==="
docker compose -p myapp-stack down --remove-orphans || true
echo "=== Clean old images ==="
docker rmi myapp:latest || true
docker system prune -f || true
echo "=== Prepare 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 JAVA_OPTS=""
ENTRYPOINT ["sh","-c","java $JAVA_OPTS -jar /app/app.jar"]
EOF
echo "=== Build image ==="
docker build --no-cache --pull -t myapp:latest .
echo "=== Create .env ==="
cat > .env <<ENV
# --- DB ---
DB_URL=${{ secrets.DB_URL }}
DB_USERNAME=${{ secrets.DB_USERNAME }}
DB_PASSWORD=${{ secrets.DB_PASSWORD }}
# --- Kakao ---
KAKAO_CLIENT_ID=${{ secrets.KAKAO_CLIENT_ID }}
KAKAO_CLIENT_SECRET=${{ secrets.KAKAO_CLIENT_SECRET }}
# 로컬 컨테이너용 콜백 (프런트 dev 서버 프록시 경로)
KAKAO_REDIRECT_URI=http://localhost:5173/api/member/kakao/callback
# --- AWS S3 (고정 자격증명) ---
AWS_S3_BUCKET=${{ secrets.AWS_S3_BUCKET }}
AWS_REGION=${{ secrets.AWS_REGION }}
AWS_ACCESS_KEY=${{ secrets.AWS_ACCESS_KEY }}
AWS_SECRET_KEY=${{ secrets.AWS_SECRET_KEY }}
# --- Frontend Origins ---
# prod 컨테이너
APP_FRONTEND_ORIGIN=https://frontend-ts-ihnk.vercel.app
APP_FRONTEND_ALLOWLIST=https://frontend-ts-ihnk.vercel.app
APP_EXTERNAL_BASE_URL=https://frontend-ts-ihnk.vercel.app/api
CORS_ORIGINS=https://frontend-ts-ihnk.vercel.app
# local 컨테이너에서 사용할 값(같은 키를 compose에 주입)
# (compose에선 컨테이너별로 override하므로 여기 값 하나만 있어도 됨)
# 필요시 별도 *_LOCAL 변수로 두고 compose에서 매핑해도 됨.
# --- Google API ---
GOOGLE_API_KEY=${{ secrets.GOOGLE_API_KEY }}
ENV
echo "=== Up containers ==="
docker compose -p myapp-stack --env-file .env up -d --force-recreate
echo "=== Verify ==="
sleep 10
docker compose -p myapp-stack ps
echo "=== Check JAR in containers ==="
docker exec myapp-prod stat /app/app.jar || echo "Prod container file check failed"
docker exec myapp-local stat /app/app.jar || echo "Local container file check failed"
echo "=== Tail logs (last 50) ==="
docker compose -p myapp-stack logs --tail=50 myapp-prod || true
docker compose -p myapp-stack logs --tail=50 myapp-local || true