chore: README 첨부 이미지 업로드 #167 #92
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
| on: | |
| push: | |
| branches: [ "main", "dev" ] | |
| workflow_dispatch: | |
| jobs: | |
| build-and-push: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| tag: ${{ steps.vars.outputs.tag }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: JDK 17 세팅 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: '17' | |
| distribution: 'temurin' | |
| - name: Gradle 캐시 | |
| uses: actions/cache@v3 | |
| with: | |
| path: | | |
| ~/.gradle/caches | |
| ~/.gradle/wrapper | |
| key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} | |
| restore-keys: | | |
| ${{ runner.os }}-gradle | |
| deploy-dev: | |
| if: github.ref == 'refs/heads/dev' | |
| needs: build-and-push | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Checkout source code | |
| uses: actions/checkout@v4 | |
| - name: Set up SSH key | |
| uses: webfactory/ssh-agent@v0.5.3 | |
| with: | |
| ssh-private-key: ${{ secrets.DEV_EC2_SSH_KEY }} | |
| - name: YML 파일 세팅 | |
| env: | |
| APPLICATION_PROPERTIES: ${{ secrets.ONKU_APP_DEV_YML }} | |
| TEST_APPLICATION_PROPERTIES: ${{ secrets.ONKU_APP_TEST_YML }} | |
| run: | | |
| cd ./src | |
| rm -rf main/resources/application.yml | |
| mkdir -p main/resources | |
| mkdir -p test/resources | |
| echo "$APPLICATION_PROPERTIES" > main/resources/application.yml | |
| echo "$TEST_APPLICATION_PROPERTIES" > test/resources/application.yml | |
| - name: gradlew 권한 부여 | |
| run: chmod +x gradlew | |
| - name: 테스트 수행 | |
| run: ./gradlew test | |
| - name: 테스트 리포트 아티팩트 업로드 | |
| if: failure() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: test-report | |
| path: build/reports/tests/test | |
| - name: 스프링부트 빌드 | |
| run: ./gradlew build | |
| - name: Docker Buildx 세팅 | |
| uses: docker/setup-buildx-action@v3 | |
| - name: docker login | |
| uses: docker/login-action@v2 | |
| with: | |
| username: ${{ secrets.DOCKERHUB_USERNAME }} | |
| password: ${{ secrets.DOCKERHUB_PASSWORD }} | |
| - name: 도커 이미지 빌드 후 푸시 | |
| if: success() | |
| uses: docker/build-push-action@v6 | |
| with: | |
| context: . | |
| file: ./Dockerfile | |
| push: true | |
| tags: ${{ secrets.DOCKERHUB_USERNAME }}/backend:${{ github.sha }} | |
| platforms: linux/amd64,linux/arm64 | |
| - name: Docker Compose 파일 NCP 서버로 전송 | |
| run: scp -o StrictHostKeyChecking=no -P ${{ secrets.DEV_EC2_PORT }} docker-compose.yml ${{ secrets.DEV_EC2_USER }}@${{ secrets.DEV_EC2_HOST }}:./ | |
| - name: EC2 접속 후 이미지 다운로드 및 배포 | |
| if: success() | |
| uses: appleboy/ssh-action@master | |
| with: | |
| host: ${{ secrets.DEV_EC2_HOST }} | |
| username: ${{ secrets.DEV_EC2_USER }} | |
| key: ${{ secrets.DEV_EC2_SSH_KEY }} | |
| port: ${{ secrets.DEV_EC2_PORT }} | |
| script: | | |
| export DOCKER_CONTAINER_REGISTRY=${{ secrets.DOCKERHUB_USERNAME }} | |
| export REDIS_PASSWORD=${{ secrets.DEV_REDIS_PASSWORD }} | |
| export GITHUB_SHA=${{ github.sha }} | |
| sudo chmod +x ./deploy.sh | |
| ./deploy.sh | |
| deploy-prod: | |
| if: github.ref == 'refs/heads/main' | |
| needs: build-and-push | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Checkout source code | |
| uses: actions/checkout@v4 | |
| - name: Set up SSH key | |
| uses: webfactory/ssh-agent@v0.5.3 | |
| with: | |
| ssh-private-key: ${{ secrets.PROD_EC2_SSH_KEY }} | |
| - name: YML 파일 세팅 | |
| env: | |
| APPLICATION_PROPERTIES: ${{ secrets.ONKU_APP_PROD_YML }} | |
| TEST_APPLICATION_PROPERTIES: ${{ secrets.ONKU_APP_TEST_YML }} | |
| run: | | |
| cd ./src | |
| rm -rf main/resources/application.yml | |
| mkdir -p main/resources | |
| mkdir -p test/resources | |
| echo "$APPLICATION_PROPERTIES" > main/resources/application.yml | |
| echo "$TEST_APPLICATION_PROPERTIES" > test/resources/application.yml | |
| - name: gradlew 권한 부여 | |
| run: chmod +x gradlew | |
| - name: 테스트 수행 | |
| run: ./gradlew test | |
| - name: 테스트 리포트 아티팩트 업로드 | |
| if: failure() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: test-report | |
| path: build/reports/tests/test | |
| - name: 스프링부트 빌드 | |
| run: ./gradlew build | |
| - name: Docker Buildx 세팅 | |
| uses: docker/setup-buildx-action@v3 | |
| - name: docker login | |
| uses: docker/login-action@v2 | |
| with: | |
| username: ${{ secrets.DOCKERHUB_USERNAME }} | |
| password: ${{ secrets.DOCKERHUB_PASSWORD }} | |
| - name: 도커 이미지 빌드 후 푸시 | |
| if: success() | |
| uses: docker/build-push-action@v6 | |
| with: | |
| context: . | |
| file: ./Dockerfile | |
| push: true | |
| tags: ${{ secrets.DOCKERHUB_USERNAME }}/backend:${{ github.sha }} | |
| platforms: linux/amd64,linux/arm64 | |
| - name: Docker Compose 파일 NCP 서버로 전송 | |
| run: scp -o StrictHostKeyChecking=no -P ${{ secrets.PROD_EC2_PORT }} docker-compose.yml ${{ secrets.PROD_EC2_USER }}@${{ secrets.PROD_EC2_HOST }}:./ | |
| - name: EC2 접속 후 이미지 다운로드 및 배포 | |
| if: success() | |
| uses: appleboy/ssh-action@master | |
| with: | |
| host: ${{ secrets.PROD_EC2_HOST }} | |
| username: ${{ secrets.PROD_EC2_USER }} | |
| key: ${{ secrets.PROD_EC2_SSH_KEY }} | |
| port: ${{ secrets.PROD_EC2_PORT }} | |
| script: | | |
| export DOCKER_CONTAINER_REGISTRY=${{ secrets.DOCKERHUB_USERNAME }} | |
| export REDIS_PASSWORD=${{ secrets.PROD_REDIS_PASSWORD }} | |
| export GITHUB_SHA=${{ github.sha }} | |
| sudo chmod +x ./deploy.sh | |
| ./deploy.sh |