Merge remote-tracking branch 'origin/develop' into cicd #33
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: Build and Deploy | |
| on: | |
| push: | |
| branches: [ "cicd", "main" ] | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| steps: | |
| # Git 저장소 체크아웃 | |
| - uses: actions/checkout@v3 | |
| # JDK 17 설정 | |
| - name: Set up JDK 17 | |
| uses: actions/setup-java@v3 | |
| with: | |
| java-version: '17' | |
| distribution: 'temurin' | |
| # Gradle 캐싱 (빌드 시간 단축) | |
| - name: Gradle Caching | |
| uses: actions/cache@v3 | |
| with: | |
| path: | | |
| ~/.gradle/caches | |
| ~/.gradle/wrapper | |
| key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} | |
| restore-keys: | | |
| ${{ runner.os }}-gradle- | |
| # Gradle 실행 권한 부여 | |
| - name: Grant execute permission for gradlew | |
| run: chmod +x gradlew | |
| # Gradle 빌드 | |
| - name: Build with Gradle | |
| run: ./gradlew clean build -x test | |
| # Docker Hub 로그인 | |
| - name: Docker Hub Login | |
| uses: docker/login-action@v2 | |
| with: | |
| username: ${{ secrets.DOCKER_USERNAME }} | |
| password: ${{ secrets.DOCKER_PASSWORD }} | |
| # Docker 빌드, 푸쉬 | |
| - name: Docker Build & Push Docker Image | |
| run: | | |
| echo "🐳 Building Docker image" | |
| docker build -t ${{ secrets.MY_DOCKER_ID }}/graduate:latest . | |
| echo "🚀 Pushing Docker image" | |
| docker push ${{ secrets.MY_DOCKER_ID }}/graduate:latest | |
| deploy: | |
| runs-on: ubuntu-latest | |
| needs: build | |
| steps: | |
| # 깃허브 레포지토리 코드 다운로드 | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| # 파일 복사 | |
| - name: Copy docker-compose.yml to Server | |
| uses: appleboy/scp-action@master | |
| with: | |
| host: ${{ secrets.SERVER_IP }} | |
| username: ${{ secrets.USERNAME }} | |
| key: ${{ secrets.PRIVATE_KEY }} | |
| source: "docker-compose.yml,prometheus.yml" | |
| target: "~/app/" # 서버의 저장 경로 | |
| # 서버에 배포 | |
| - name: Deploy to Server | |
| uses: appleboy/ssh-action@master | |
| with: | |
| host: ${{ secrets.SERVER_IP }} # EC2 퍼블릭 IP | |
| username: ${{ secrets.USERNAME }} # 홈서버 SSH 계정 (ex: ubuntu) | |
| key: ${{ secrets.PRIVATE_KEY }} # PEM 키 | |
| script: | | |
| cd ~/app | |
| # Create .env file | |
| printf "${{ secrets.ENV_FILE }}" > .env | |
| # 1️⃣ 최신 Docker 이미지 풀 | |
| docker compose pull | |
| # 2️⃣ 이전 컨테이너 삭제 | |
| docker compose down | |
| # 3️⃣ 컨테이너와 서비스를 Docker Compose로 실행 | |
| docker compose up -d | |
| # 4️⃣ 불필요한 이미지 삭제 | |
| docker image prune -f |