diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 34f1085..fc4b1be 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -1,10 +1,3 @@ -# This workflow uses actions that are not certified by GitHub. -# They are provided by a third-party and are governed by -# separate terms of service, privacy policy, and support -# documentation. -# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time -# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle - name: Java CI with Gradle on: @@ -12,61 +5,70 @@ on: branches: [ "main" ] jobs: - #Build + # Build build: runs-on: ubuntu-latest permissions: contents: read steps: - ## 체크아웃 - - name: Checkout + # Checkout repository + - name: Checkout repository uses: actions/checkout@v3 with: - token: ${{ secrets.TOKEN }} - submodules: true - ## JDK 17 + token: ${{ secrets.TOKEN }} + submodules: true + + # Set up JDK 17 - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' + cache: gradle - # Configure Gradle for optimal use in GiHub Actions, including caching of downloaded dependencies. - # See: https://github.com/gradle/actions/blob/main/setup-gradle/README.md - - ## Gradle build (Test 제외) - - name: Build with Gradle - uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1 + # Cache Gradle dependencies + - name: Cache Gradle dependencies + uses: actions/cache@v3 with: - arguments: clean build -x test + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- - ## Docker build & push + # Build project with Gradle (excluding tests) + - name: Build with Gradle + run: ./gradlew clean build -x test + + # Docker build and push - name: Docker build and push run: | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_PASSWORD }} docker build -t ${{ secrets.DOCKERHUB_REPOSITORY }} . docker tag ${{ secrets.DOCKERHUB_REPOSITORY }} ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPOSITORY }}:${GITHUB_SHA::7} - docker push ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPOSITORY }}:${GITHUB_SHA::7} + docker push ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPOSITORY }}:${GITHUB_SHA::7} - #Deploy + # Deploy deploy: runs-on: ubuntu-latest needs: build steps: - - name: Checkout - uses: actions/checkout@v3 + # Checkout repository + - name: Checkout repository + uses: actions/checkout@v3 - - name: Deploy - uses: appleboy/ssh-action@master - with: - host: ${{ secrets.VM_INSTANCE }} - username: ${{ secrets.SSH_USERNAME }} - key: ${{ secrets.SSH_PRIVATE_KEY }} - envs: GITHUB_SHA - script: | - sudo docker-compose down - sudo docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_PASSWORD }} - sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPOSITORY }}:${GITHUB_SHA::7} - sudo docker tag ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPOSITORY }}:${GITHUB_SHA::7} donut - sudo docker-compose up -d --remove-orphans + # Deploy using SSH + - name: Deploy application + uses: appleboy/ssh-action@master + with: + host: ${{ secrets.VM_INSTANCE }} + username: ${{ secrets.SSH_USERNAME }} + key: ${{ secrets.SSH_PRIVATE_KEY }} + script: | + sudo docker-compose down + sudo docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_PASSWORD }} + sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPOSITORY }}:${GITHUB_SHA::7} + sudo docker tag ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPOSITORY }}:${GITHUB_SHA::7} donut + sudo docker-compose up -d --remove-orphans