chore: gemini 모델 변경 #114
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |