From a222779f44abf9cb976ffc75ec55d03aac1a5c17 Mon Sep 17 00:00:00 2001 From: UNGGU0704 Date: Thu, 12 Jun 2025 16:28:08 +0900 Subject: [PATCH 1/7] =?UTF-8?q?Create:=20analytics=20CI=20worklow=20?= =?UTF-8?q?=EC=97=85=EB=A1=9C=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/analytics-ci.yml | 109 +++++++++++++++++++++++++++++ analytics/Dockerfile | 51 ++++++++++++++ 2 files changed, 160 insertions(+) create mode 100644 .github/workflows/analytics-ci.yml create mode 100644 analytics/Dockerfile diff --git a/.github/workflows/analytics-ci.yml b/.github/workflows/analytics-ci.yml new file mode 100644 index 0000000..1bfb406 --- /dev/null +++ b/.github/workflows/analytics-ci.yml @@ -0,0 +1,109 @@ +name: Analytics CI + +on: + push: + branches: [ main, develop ] + paths: + - 'analytics/**' + - 'common/**' + - 'build.gradle' + - 'settings.gradle' + pull_request: + branches: [ main ] + paths: + - 'analytics/**' + - 'common/**' + - 'build.gradle' + - 'settings.gradle' + +env: + ACR_NAME: acrdigitalgarage03 + IMAGE_NAME: hiorder/analytics + +jobs: + build-and-push: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up JDK 21 + uses: actions/setup-java@v4 + with: + java-version: '21' + distribution: 'temurin' + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 + with: + gradle-version: '8.13' + + - name: Cache Gradle packages + uses: actions/cache@v4 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Build common module + run: ./gradlew common:build -x test + + - name: Build analytics module + run: ./gradlew analytics:build -x test + + - name: Run analytics tests + run: ./gradlew analytics:test + + - name: Generate build timestamp + id: timestamp + run: echo "BUILD_TIME=$(date +'%y%m%d%H%M')" >> $GITHUB_OUTPUT + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to Azure Container Registry + uses: azure/docker-login@v1 + with: + login-server: ${{ env.ACR_NAME }}.azurecr.io + username: ${{ secrets.ACR_USERNAME }} + password: ${{ secrets.ACR_PASSWORD }} + + - name: Build and push Docker image + uses: docker/build-push-action@v5 + with: + context: . + file: ./analytics/Dockerfile + platforms: linux/amd64 + push: true + tags: | + ${{ env.ACR_NAME }}.azurecr.io/${{ env.IMAGE_NAME }}:${{ steps.timestamp.outputs.BUILD_TIME }} + ${{ env.ACR_NAME }}.azurecr.io/${{ env.IMAGE_NAME }}:latest + cache-from: type=gha + cache-to: type=gha,mode=max + + - name: Output image tags + run: | + echo "πŸŽ‰ Image pushed successfully!" + echo "πŸ“¦ Image: ${{ env.ACR_NAME }}.azurecr.io/${{ env.IMAGE_NAME }}" + echo "🏷️ Tags: ${{ steps.timestamp.outputs.BUILD_TIME }}, latest" + + - name: Upload test results + uses: actions/upload-artifact@v4 + if: always() + with: + name: analytics-test-results + path: analytics/build/reports/tests/test/ + + - name: Upload build artifacts + uses: actions/upload-artifact@v4 + if: success() + with: + name: analytics-jar + path: analytics/build/libs/*.jar \ No newline at end of file diff --git a/analytics/Dockerfile b/analytics/Dockerfile new file mode 100644 index 0000000..d9002e9 --- /dev/null +++ b/analytics/Dockerfile @@ -0,0 +1,51 @@ +# Analytics μ„œλΉ„μŠ€μš© Dockerfile +FROM eclipse-temurin:21-jdk-alpine AS builder + +# μž‘μ—… 디렉토리 μ„€μ • +WORKDIR /app + +# Gradle Wrapper와 μ„€μ • 파일 볡사 +COPY gradlew . +COPY gradle/wrapper gradle/wrapper +COPY build.gradle . +COPY settings.gradle . + +# μ†ŒμŠ€ μ½”λ“œ 볡사 +COPY common common/ +COPY analytics analytics/ + +# μ‹€ν–‰ κΆŒν•œ λΆ€μ—¬ 및 λΉŒλ“œ +RUN chmod +x ./gradlew +RUN ./gradlew analytics:build -x test --no-daemon + +# μ‹€ν–‰ 단계 +FROM eclipse-temurin:21-jre-alpine + +# μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‚¬μš©μž 생성 +RUN addgroup -g 1001 -S appgroup && \ + adduser -u 1001 -S appuser -G appgroup + +# μž‘μ—… 디렉토리 μ„€μ • +WORKDIR /app + +# λΉŒλ“œλœ JAR 파일 볡사 +COPY --from=builder /app/analytics/build/libs/analytics-*.jar app.jar + +# 파일 μ†Œμœ κΆŒ λ³€κ²½ +RUN chown -R appuser:appgroup /app + +# μ‚¬μš©μž λ³€κ²½ +USER appuser + +# 포트 λ…ΈμΆœ +EXPOSE 8080 + +# ν—¬μŠ€μ²΄ν¬ μΆ”κ°€ +HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ + CMD wget --no-verbose --tries=1 --spider http://localhost:8080/actuator/health || exit 1 + +# JVM μ˜΅μ…˜ μ„€μ • +ENV JAVA_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:+UseStringDeduplication" + +# μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ +ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"] \ No newline at end of file From 8b259b49c03c1181c0b9d32c9529f8c941cac6c4 Mon Sep 17 00:00:00 2001 From: UNGGU0704 Date: Thu, 12 Jun 2025 16:33:54 +0900 Subject: [PATCH 2/7] =?UTF-8?q?update:=20gradle-wrapper=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20job=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/analytics-ci.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.github/workflows/analytics-ci.yml b/.github/workflows/analytics-ci.yml index 1bfb406..d695306 100644 --- a/.github/workflows/analytics-ci.yml +++ b/.github/workflows/analytics-ci.yml @@ -49,9 +49,25 @@ jobs: restore-keys: | ${{ runner.os }}-gradle- + - name: Check gradle wrapper files + run: | + echo "Checking gradle wrapper files..." + ls -la gradle/wrapper/ + ls -la gradlew* + echo "Downloading gradle wrapper if needed..." + if [ ! -f "gradle/wrapper/gradle-wrapper.jar" ]; then + echo "gradle-wrapper.jar not found, generating wrapper..." + gradle wrapper --gradle-version 8.13 + fi + - name: Grant execute permission for gradlew run: chmod +x gradlew + - name: Verify gradle wrapper + run: | + echo "Testing gradle wrapper..." + ./gradlew --version + - name: Build common module run: ./gradlew common:build -x test From 59cd7ffde3ba8ed541884bf60bf603c227e4ddc2 Mon Sep 17 00:00:00 2001 From: Unggu Date: Thu, 12 Jun 2025 16:39:15 +0900 Subject: [PATCH 3/7] Update analytics-ci.yml --- .github/workflows/analytics-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/analytics-ci.yml b/.github/workflows/analytics-ci.yml index d695306..e38de6a 100644 --- a/.github/workflows/analytics-ci.yml +++ b/.github/workflows/analytics-ci.yml @@ -15,7 +15,7 @@ on: - 'common/**' - 'build.gradle' - 'settings.gradle' - + workflow_dispatch: env: ACR_NAME: acrdigitalgarage03 IMAGE_NAME: hiorder/analytics @@ -122,4 +122,4 @@ jobs: if: success() with: name: analytics-jar - path: analytics/build/libs/*.jar \ No newline at end of file + path: analytics/build/libs/*.jar From cbbd0b445aca8f9b50070f71d99ea683de44723a Mon Sep 17 00:00:00 2001 From: Unggu Date: Thu, 12 Jun 2025 16:43:17 +0900 Subject: [PATCH 4/7] Update analytics-ci.yml --- .github/workflows/analytics-ci.yml | 192 ++++++++++++++--------------- 1 file changed, 92 insertions(+), 100 deletions(-) diff --git a/.github/workflows/analytics-ci.yml b/.github/workflows/analytics-ci.yml index e38de6a..6803bf9 100644 --- a/.github/workflows/analytics-ci.yml +++ b/.github/workflows/analytics-ci.yml @@ -16,110 +16,102 @@ on: - 'build.gradle' - 'settings.gradle' workflow_dispatch: + env: ACR_NAME: acrdigitalgarage03 IMAGE_NAME: hiorder/analytics - + jobs: build-and-push: runs-on: ubuntu-latest - + steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Set up JDK 21 - uses: actions/setup-java@v4 - with: - java-version: '21' - distribution: 'temurin' - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v3 - with: - gradle-version: '8.13' - - - name: Cache Gradle packages - uses: actions/cache@v4 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle- - - - name: Check gradle wrapper files - run: | - echo "Checking gradle wrapper files..." - ls -la gradle/wrapper/ - ls -la gradlew* - echo "Downloading gradle wrapper if needed..." - if [ ! -f "gradle/wrapper/gradle-wrapper.jar" ]; then - echo "gradle-wrapper.jar not found, generating wrapper..." - gradle wrapper --gradle-version 8.13 - fi - - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - - name: Verify gradle wrapper - run: | - echo "Testing gradle wrapper..." - ./gradlew --version - - - name: Build common module - run: ./gradlew common:build -x test - - - name: Build analytics module - run: ./gradlew analytics:build -x test - - - name: Run analytics tests - run: ./gradlew analytics:test - - - name: Generate build timestamp - id: timestamp - run: echo "BUILD_TIME=$(date +'%y%m%d%H%M')" >> $GITHUB_OUTPUT - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to Azure Container Registry - uses: azure/docker-login@v1 - with: - login-server: ${{ env.ACR_NAME }}.azurecr.io - username: ${{ secrets.ACR_USERNAME }} - password: ${{ secrets.ACR_PASSWORD }} - - - name: Build and push Docker image - uses: docker/build-push-action@v5 - with: - context: . - file: ./analytics/Dockerfile - platforms: linux/amd64 - push: true - tags: | - ${{ env.ACR_NAME }}.azurecr.io/${{ env.IMAGE_NAME }}:${{ steps.timestamp.outputs.BUILD_TIME }} - ${{ env.ACR_NAME }}.azurecr.io/${{ env.IMAGE_NAME }}:latest - cache-from: type=gha - cache-to: type=gha,mode=max - - - name: Output image tags - run: | - echo "πŸŽ‰ Image pushed successfully!" - echo "πŸ“¦ Image: ${{ env.ACR_NAME }}.azurecr.io/${{ env.IMAGE_NAME }}" - echo "🏷️ Tags: ${{ steps.timestamp.outputs.BUILD_TIME }}, latest" - - - name: Upload test results - uses: actions/upload-artifact@v4 - if: always() - with: - name: analytics-test-results - path: analytics/build/reports/tests/test/ - - - name: Upload build artifacts - uses: actions/upload-artifact@v4 - if: success() - with: - name: analytics-jar - path: analytics/build/libs/*.jar + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up JDK 21 + uses: actions/setup-java@v4 + with: + java-version: '21' + distribution: 'temurin' + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 + with: + gradle-version: '8.13' + + - name: Cache Gradle packages + uses: actions/cache@v4 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- + + - name: Fix Gradle Wrapper + run: | + echo "Checking gradle wrapper files..." + if [ ! -f "gradle/wrapper/gradle-wrapper.jar" ]; then + echo "gradle-wrapper.jar not found, downloading..." + mkdir -p gradle/wrapper + curl -L -o gradle/wrapper/gradle-wrapper.jar \ + "https://services.gradle.org/distributions/gradle-8.13-wrapper.jar" + fi + chmod +x gradlew + echo "Testing gradle wrapper..." + ./gradlew --version + + - name: Build analytics module with dependencies + run: ./gradlew analytics:build -x test + + - name: Run analytics tests + run: ./gradlew analytics:test + + - name: Generate build timestamp + id: timestamp + run: echo "BUILD_TIME=$(date +'%y%m%d%H%M')" >> $GITHUB_OUTPUT + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to Azure Container Registry + uses: azure/docker-login@v1 + with: + login-server: ${{ env.ACR_NAME }}.azurecr.io + username: ${{ secrets.ACR_USERNAME }} + password: ${{ secrets.ACR_PASSWORD }} + + - name: Build and push Docker image + uses: docker/build-push-action@v5 + with: + context: . + file: ./analytics/Dockerfile + platforms: linux/amd64 + push: true + tags: | + ${{ env.ACR_NAME }}.azurecr.io/${{ env.IMAGE_NAME }}:${{ steps.timestamp.outputs.BUILD_TIME }} + ${{ env.ACR_NAME }}.azurecr.io/${{ env.IMAGE_NAME }}:latest + cache-from: type=gha + cache-to: type=gha,mode=max + + - name: Output image tags + run: | + echo "πŸŽ‰ Image pushed successfully!" + echo "πŸ“¦ Image: ${{ env.ACR_NAME }}.azurecr.io/${{ env.IMAGE_NAME }}" + echo "🏷️ Tags: ${{ steps.timestamp.outputs.BUILD_TIME }}, latest" + + - name: Upload test results + uses: actions/upload-artifact@v4 + if: always() + with: + name: analytics-test-results + path: analytics/build/reports/tests/test/ + + - name: Upload build artifacts + uses: actions/upload-artifact@v4 + if: success() + with: + name: analytics-jar + path: analytics/build/libs/*.jar From 308ded16029d6c91b1a92bba944408d353a98f58 Mon Sep 17 00:00:00 2001 From: Unggu Date: Thu, 12 Jun 2025 16:47:14 +0900 Subject: [PATCH 5/7] Update analytics-ci.yml --- .github/workflows/analytics-ci.yml | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/.github/workflows/analytics-ci.yml b/.github/workflows/analytics-ci.yml index 6803bf9..0f29299 100644 --- a/.github/workflows/analytics-ci.yml +++ b/.github/workflows/analytics-ci.yml @@ -50,15 +50,10 @@ jobs: restore-keys: | ${{ runner.os }}-gradle- - - name: Fix Gradle Wrapper + - name: Generate Gradle Wrapper run: | - echo "Checking gradle wrapper files..." - if [ ! -f "gradle/wrapper/gradle-wrapper.jar" ]; then - echo "gradle-wrapper.jar not found, downloading..." - mkdir -p gradle/wrapper - curl -L -o gradle/wrapper/gradle-wrapper.jar \ - "https://services.gradle.org/distributions/gradle-8.13-wrapper.jar" - fi + echo "Generating gradle wrapper..." + gradle wrapper --gradle-version 8.13 chmod +x gradlew echo "Testing gradle wrapper..." ./gradlew --version From a2a4bc6cbdf7bf61d84e893dd67e4b9c2f5a3f9e Mon Sep 17 00:00:00 2001 From: Unggu Date: Thu, 12 Jun 2025 17:00:05 +0900 Subject: [PATCH 6/7] Update analytics-ci.yml --- .github/workflows/analytics-ci.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/analytics-ci.yml b/.github/workflows/analytics-ci.yml index 0f29299..28da0c2 100644 --- a/.github/workflows/analytics-ci.yml +++ b/.github/workflows/analytics-ci.yml @@ -70,7 +70,9 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - + with: + driver: docker-container + - name: Log in to Azure Container Registry uses: azure/docker-login@v1 with: From 492f4f3f68c18c6b7163015c383865b7da432eaf Mon Sep 17 00:00:00 2001 From: Unggu Date: Thu, 12 Jun 2025 17:04:47 +0900 Subject: [PATCH 7/7] Update analytics-ci.yml --- .github/workflows/analytics-ci.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/analytics-ci.yml b/.github/workflows/analytics-ci.yml index 28da0c2..64408f3 100644 --- a/.github/workflows/analytics-ci.yml +++ b/.github/workflows/analytics-ci.yml @@ -70,9 +70,7 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - with: - driver: docker-container - + - name: Log in to Azure Container Registry uses: azure/docker-login@v1 with: @@ -90,8 +88,6 @@ jobs: tags: | ${{ env.ACR_NAME }}.azurecr.io/${{ env.IMAGE_NAME }}:${{ steps.timestamp.outputs.BUILD_TIME }} ${{ env.ACR_NAME }}.azurecr.io/${{ env.IMAGE_NAME }}:latest - cache-from: type=gha - cache-to: type=gha,mode=max - name: Output image tags run: |