diff --git a/.github/workflows/dev-build-and-deploy.yaml b/.github/workflows/dev-build-and-deploy.yaml index f117acc7..fee778be 100644 --- a/.github/workflows/dev-build-and-deploy.yaml +++ b/.github/workflows/dev-build-and-deploy.yaml @@ -4,11 +4,9 @@ on: push: branches: - main - - dev pull_request: branches: - main - - dev jobs: build-and-test: @@ -37,6 +35,11 @@ jobs: - name: Grant execute permission for gradlew run: chmod +x gradlew + - name: Create Gradle Properties + run: | + touch gradle.properties + echo "${{ secrets.GRADLE_PROPERTIES }}" >> gradle.properties + - name: Build with Gradle run: ./gradlew build -x test --stacktrace --parallel @@ -82,20 +85,23 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 + - name: Create Gradle Properties + run: | + touch gradle.properties + echo "${{ secrets.GRADLE_PROPERTIES }}" >> gradle.properties + - name: Login to DockerHub uses: docker/login-action@v2 with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} + username: ${{ secrets.SPOT_DOCKER_HUB_USERNAME }} + password: ${{ secrets.SPOT_DOCKER_HUB_PASSWORD }} - - name: Build and push Docker image - uses: docker/build-push-action@v4 - with: - context: . - push: true - tags: ${{ secrets.DOCKERHUB_USERNAME }}/spot-server:dev-${{ github.sha }} + - name: Build with jib + run: | + ./gradlew jib \ + -Djib.to.image="${{ secrets.SPOT_DOCKER_HUB_USERNAME }}/${{ secrets.SPOT_DOCKER_HUB_REPOSITORY }}:dev-${{ github.sha }}" - - name: Deploy to Dev NCP Server + - name: Deploy to Dev AWS Server uses: appleboy/ssh-action@master with: host: ${{ secrets.DEV_SERVER_HOST }} @@ -103,7 +109,7 @@ jobs: password: ${{ secrets.DEV_SERVER_PASSWORD }} port: ${{ secrets.DEV_SERVER_PORT }} script: | - docker pull ${{ secrets.DOCKERHUB_USERNAME }}/spot-server:dev-${{ github.sha }} + docker pull ${{ secrets.SPOT_DOCKER_HUB_USERNAME }}/${{ secrets.SPOT_DOCKER_HUB_REPOSITORY }}:dev-${{ github.sha }} docker stop spot-server-dev || true docker rm spot-server-dev || true docker run -d --name spot-server-dev \ @@ -138,29 +144,5 @@ jobs: -e SENTRY_ENABLE_TRACING=true \ -e SENTRY_ENVIRONMENT=prod \ -e LOKI_URL=${{ secrets.LOKI_SERVER_URL }} \ - ${{ secrets.DOCKERHUB_USERNAME }}/spot-server:dev-${{ github.sha }} - docker system prune -af - -# create-release: -# needs: [ build-and-test, deploy ] # deploy job이 성공적으로 완료된 후에만 실행 -## if: github.event.pull_request.merged == true # PR이 merge된 경우에만 실행 -# runs-on: ubuntu-latest -# permissions: -# contents: write -# steps: -# - name: Checkout code -# uses: actions/checkout@v4 -# -# - name: Bump version and push tag -# id: tag_version -# uses: mathieudutour/github-tag-action@v6.1 -# with: -# github_token: ${{ secrets.GITHUB_TOKEN }} -# -# - name: Create a GitHub release -# uses: ncipollo/release-action@v1 -# with: -# tag: ${{ steps.tag_version.outputs.new_tag }} -# name: Release ${{ steps.tag_version.outputs.new_tag }} -# body: ${{ steps.tag_version.outputs.changelog }} - + ${{ secrets.SPOT_DOCKER_HUB_USERNAME }}/${{ secrets.SPOT_DOCKER_HUB_REPOSITORY }}:dev-${{ github.sha }} + docker system prune -af \ No newline at end of file diff --git a/.gitignore b/.gitignore index 13e81ca8..b09e7d43 100644 --- a/.gitignore +++ b/.gitignore @@ -392,4 +392,6 @@ application-sentry.yml application-aws.yaml # 민성 레디스 바이너리 파일 -redis-server-7.2.3-mac-arm64 \ No newline at end of file +redis-server-7.2.3-mac-arm64 + +gradle.properties \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index cc7d601f..9a4d338a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,6 +4,7 @@ plugins { id("com.diffplug.spotless") id("org.springframework.boot") id("io.spring.dependency-management") + id("com.google.cloud.tools.jib") } allprojects { @@ -22,6 +23,7 @@ subprojects { apply(plugin = "io.spring.dependency-management") apply(plugin = "com.diffplug.spotless") apply(plugin = "io.sentry.jvm.gradle") + apply(plugin = "com.google.cloud.tools.jib") java { sourceCompatibility = JavaVersion.VERSION_17 @@ -84,6 +86,44 @@ subprojects { tasks.test { useJUnitPlatform() } + + val dockerHubRepository: String by project + val dockerHubUsername: String by project + val dockerHubPassword: String by project + + jib { + from { + image = "openjdk:17-jdk-slim" + } + to { + fun String.runCommand(): String = + ProcessBuilder(*this.split(" ").toTypedArray()) + .redirectErrorStream(true) + .start() + .inputStream + .bufferedReader() + .readText() + .trim() + val gitHash = "git rev-parse --short HEAD".runCommand() + + image = "$dockerHubUsername/$dockerHubRepository:$gitHash" + + auth { + username = dockerHubUsername + password = dockerHubPassword + } + } + container { + ports = listOf("8080") + entrypoint = listOf( + "java", + "-Xms512m", "-Xmx512m", + "-Xminf0.4", "-Xmaxf0.7", + "-jar", + "/app.jar" + ) + } + } } // root 모듈은 실행 파일이 없으므로 bootJar를 생성하지 않는다. diff --git a/versions.properties b/versions.properties index 22b11398..7863e1c6 100644 --- a/versions.properties +++ b/versions.properties @@ -15,6 +15,8 @@ plugin.io.spring.dependency-management=1.0.11.RELEASE plugin.com.diffplug.spotless=6.21.0 +plugin.com.google.cloud.tools.jib=3.1.4 + version.io.jsonwebtoken..jjwt=0.12.6 version.junit=5.9.1