From 6d769ad169a5b5d9d69b46eb60c44fb24d273561 Mon Sep 17 00:00:00 2001 From: Hyeok_Choi Date: Fri, 8 Dec 2023 20:58:30 +0900 Subject: [PATCH] =?UTF-8?q?chore:=20prod=20cd=20=EA=B5=AC=EC=B6=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/prod_cd.yaml | 70 +++++++++++++++++++++++++ Dockerfile_prod | 22 ++++++++ src/main/resources/application-prod.yml | 12 +++++ 3 files changed, 104 insertions(+) create mode 100644 .github/workflows/prod_cd.yaml create mode 100644 Dockerfile_prod diff --git a/.github/workflows/prod_cd.yaml b/.github/workflows/prod_cd.yaml new file mode 100644 index 0000000..02a5807 --- /dev/null +++ b/.github/workflows/prod_cd.yaml @@ -0,0 +1,70 @@ +name: main branch cd + +on: + push: + branches: + - "main" + +env: + MAIN_YML_PATH: ./src/main/resources/application.yml + PROD_YML_PATH: ./src/main/resources/application-prod.yml + +jobs: + build-and-push-image: + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: application.yml setting + uses: microsoft/variable-substitution@v1 + with: + files: ${{ env.MAIN_YML_PATH }} + env: + coolsms.api.key: ${{ secrets.COOLSMS_API_KEY }} + coolsms.api.secret: ${{ secrets.COOLSMS_API_SECRET }} + coolsms.api.from-number: ${{ secrets.COOLSMS_API_FROM_NUMBER }} + + - name: application-prod.yml setting + uses: microsoft/variable-substitution@v1 + with: + files: ${{ env.PROD_YML_PATH }} + env: + spring.datasource.url: ${{ secrets.RDS_URL }} + spring.datasource.username: ${{ secrets.PROD_DB_USERNAME }} + spring.datasource.password: ${{ secrets.PROD_DB_PASSWORD }} + + - name: Cache Gradle packages + uses: actions/cache@v1 + with: + path: ~/.gradle/caches + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }} + restore-keys: ${{ runner.os }}-gradle + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Clean and Build with Gradle + run: ./gradlew clean build -x test + + - name: Docker build & push + run: | + docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} + docker build -t ${{ secrets.DOCKER_USERNAME }}/insurance_system_prod . + docker push ${{ secrets.DOCKER_USERNAME }}/insurance_system_prod + + - name: Deploy EC2 + uses: appleboy/ssh-action@master + with: + host: ${{ secrets.EC2_HOST_IP }} + username: ubuntu + key: ${{ secrets.EC2_KEY }} + port: 22 + script: | + docker stop insurance_system_prod + docker rm insurance_system_prod + docker rmi choihyeok/insurance_system_prod + docker pull choihyeok/insurance_system_prod + docker run -d -p 80:8080 --name insurance_system_prod choihyeok/insurance_system_prod \ No newline at end of file diff --git a/Dockerfile_prod b/Dockerfile_prod new file mode 100644 index 0000000..002450a --- /dev/null +++ b/Dockerfile_prod @@ -0,0 +1,22 @@ +# 테스트 서버 빌드 스크립트 +# jar 파일 빌드 +FROM eclipse-temurin:17 as builder + +COPY gradlew . +COPY gradle gradle +COPY build.gradle . +COPY settings.gradle . +COPY src src +RUN chmod +x ./gradlew +RUN ./gradlew bootjar + +# jar 실행 +FROM eclipse-temurin:17-jre as runtime + +COPY --from=builder build/libs/*.jar app.jar + +ENV PROFILE prod + +EXPOSE 8080 + +ENTRYPOINT ["java", "-Dspring.profiles.active=${PROFILE}", "-jar", "/app.jar"] \ No newline at end of file diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index e69de29..6d2f1a2 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -0,0 +1,12 @@ +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: + username: + password: + + jpa: + database-platform: org.hibernate.dialect.MySQL5InnoDBDialect + open-in-view: false + hibernate: + ddl-auto: validate \ No newline at end of file