Update 리팩토링.md #19
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: SEMTLE-WEB-SERVER CI/CD | |
| on: | |
| push: | |
| branches: [ "main" ] | |
| pull_request: | |
| branches: [ "main" ] | |
| jobs: | |
| build-docker-image: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| # GitHub 레포지토리 체크아웃 | |
| - uses: actions/checkout@v4 | |
| # Java 17 설정 | |
| - name: Set up JDK 17 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: '17' | |
| distribution: 'temurin' | |
| # ✅ application.yml 생성 (여기에 추가) | |
| - name: Create application.yml | |
| run: | | |
| mkdir -p src/main/resources | |
| echo "${{ secrets.APPLICATION_YML }}" > src/main/resources/application.yml | |
| # 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 빌드 (application.yml이 필요하므로 이 전에 생성해야 함) | |
| - name: Build with Gradle | |
| run: ./gradlew build | |
| # Docker 로그인 | |
| - name: Login to Docker Hub | |
| uses: docker/login-action@v2 | |
| with: | |
| username: ${{ secrets.DOCKERHUB_USERNAME }} | |
| password: ${{ secrets.DOCKERHUB_PASSWORD }} | |
| # Docker 이미지 빌드 및 푸시 | |
| - name: Build and Push Docker Image | |
| run: | | |
| docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/semtle-web-server:latest -f Dockerfile . | |
| docker push ${{ secrets.DOCKERHUB_USERNAME }}/semtle-web-server:latest | |
| deploy-docker-image: | |
| if: github.event_name == 'push' && github.ref == 'refs/heads/main' | |
| needs: build-docker-image | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Deploy via SSH | |
| uses: appleboy/ssh-action@v1.0.0 | |
| with: | |
| host: ${{ secrets.SERVER_HOST }} | |
| username: ${{ secrets.SERVER_USER }} | |
| key: ${{ secrets.SERVER_SSH_KEY }} | |
| port: ${{ secrets.SERVER_PORT }} | |
| script: | | |
| docker login --username ${{ secrets.DOCKERHUB_USERNAME }} --password ${{ secrets.DOCKERHUB_PASSWORD }} | |
| docker pull ${{ secrets.DOCKERHUB_USERNAME }}/semtle-web-server:latest | |
| # ✅ 기존 spring 컨테이너 중지 및 삭제 | |
| if [ "$(docker ps -a -q -f name=spring_container)" ]; then | |
| docker stop spring_container | |
| docker rm spring_container | |
| fi | |
| # ✅ 최신 spring 이미지로 다시 실행 | |
| docker compose -f /root/semtle-web-server/docker-compose.yml up -d --no-deps --force-recreate spring_app | |
| docker system prune -f |