From 55d76d30292594424064247d928be6cf17b81e7c Mon Sep 17 00:00:00 2001 From: Yujin1219 Date: Tue, 9 Dec 2025 18:58:22 +0900 Subject: [PATCH] =?UTF-8?q?[#9]=20CICD:=20Gradle=20=EB=B9=8C=EB=93=9C/Dock?= =?UTF-8?q?er=20=EB=B0=B0=ED=8F=AC=20=EC=9E=90=EB=8F=99=ED=99=94=EB=A5=BC?= =?UTF-8?q?=20=EC=9C=84=ED=95=9C=20workflow.yml=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/workflow.yml | 101 +++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 .github/workflows/workflow.yml diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml new file mode 100644 index 0000000..8768379 --- /dev/null +++ b/.github/workflows/workflow.yml @@ -0,0 +1,101 @@ +name: TripTalk CI/CD with Gradle, Test, and Docker + +on: + workflow_dispatch: + push: + branches: [ "develop" ] + pull_request: + branches: [ "develop" ] + +permissions: + contents: read + +jobs: + CI-CD: + runs-on: ubuntu-latest + permissions: + contents: read + + steps: + # 1. 코드 체크아웃 + - uses: actions/checkout@v4 + + # 2. JDK 21 설정 + - name: Set up JDK 21 + uses: actions/setup-java@v4 + with: + java-version: '21' + distribution: 'temurin' + + # 3. Gradle 캐시 + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- + + # 4. application.yml 생성 + - name: Make application.yml from Secret + run: | + mkdir -p ./src/main/resources + echo "${{ secrets.APPLICATION_DEV_YML_BASE64 }}" | base64 --decode > ./src/main/resources/application.yml + echo "=== [DEBUG] application.yml ===" + cat ./src/main/resources/application.yml + + # 5. gradlew 권한 부여 + - name: Grant Execute Permission For Gradlew + run: chmod +x gradlew + + # 6. Gradle build + - name: Build Gradle (without test) + run: ./gradlew bootJar -x test + + # 7. Docker Build & Push + - name: Docker Build & Push + run: | + docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} + docker build -t ${{ secrets.DOCKER_USERNAME }}/triptalk-spring:latest . + docker push ${{ secrets.DOCKER_USERNAME }}/triptalk-spring:latest + + # 8. 서버 배포 (Dev 서버) + - name: Deploy to Dev + uses: appleboy/ssh-action@master + if: contains(github.ref,'develop') + with: + key: ${{ secrets.PRIVATE_KEY }} + host: ${{ secrets.HOST }} + username: ${{ secrets.USERNAME }} + port: 22 + script: | + cd ~/app + + # 기존 컨테이너 정리 + docker-compose -f docker-compose.yml down || true + + # 최신 이미지 pull + docker pull ${{ secrets.DOCKER_USERNAME }}/triptalk-spring:latest + + # 컨테이너 재시작 + docker-compose -f docker-compose.yml up -d --remove-orphans + + # 사용하지 않는 이미지 삭제 + docker image prune -f + + # 9. 현재 시간 출력 + current-time: + needs: CI-CD + runs-on: ubuntu-latest + steps: + - name: Get Current Time + uses: 1466587594/get-current-time@v2 + id: current-time + with: + format: YYYY-MM-DDTHH:mm:ss + utcOffset: "+09:00" + + - name: Print Current Time + run: echo "Current Time=${{steps.current-time.outputs.formattedTime}}"