From efb85cd11cc8441806d2e96c1a3969ae11d52866 Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Mon, 23 Jun 2025 22:45:39 +0900 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20=EC=95=A0=ED=94=8C=EB=A6=AC?= =?UTF-8?q?=EC=BC=80=EC=9D=B4=EC=85=98=20=ED=99=98=EA=B2=BD=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=ED=8C=8C=EC=9D=BC=20=EC=B6=94=EA=B0=80=20=EB=B0=8F?= =?UTF-8?q?=20.gitignore=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - application-dev.yml, application-local.yml, application-prod.yml, application-test.yml 파일 추가 - .gitignore에서 애플리케이션 파일 관련 항목 제거 --- .gitignore | 8 -- src/main/resources/application-dev.yml | 99 +++++++++++++++++++++ src/main/resources/application-local.yml | 96 ++++++++++++++++++++ src/main/resources/application-prod.yml | 106 +++++++++++++++++++++++ src/main/resources/application-test.yml | 74 ++++++++++++++++ src/main/resources/application.yml | 6 ++ 6 files changed, 381 insertions(+), 8 deletions(-) create mode 100644 src/main/resources/application-dev.yml create mode 100644 src/main/resources/application-local.yml create mode 100644 src/main/resources/application-prod.yml create mode 100644 src/main/resources/application-test.yml create mode 100644 src/main/resources/application.yml diff --git a/.gitignore b/.gitignore index a64042c7..4ec9ead9 100644 --- a/.gitignore +++ b/.gitignore @@ -36,14 +36,6 @@ out/ ### VS Code ### .vscode/ -### application files ### -application.yml -application-local.yml -application-dev.yml -application-test.yml -application-prod.yml - - ### Generated files ### /src/main/generated/ diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml new file mode 100644 index 00000000..0b019a1d --- /dev/null +++ b/src/main/resources/application-dev.yml @@ -0,0 +1,99 @@ +## port number +server: + port: 9000 + env: dev + + +spring: + ## Database + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: ${EATSSU_DB_URL_DEV} + username: ${EATSSU_DB_USERNAME} + password: ${EATSSU_DB_PASSWORD} + hikari: + maximum-pool-size: 200 + minimum-idle: 10 + connection-timeout: 2500 + connection-init-sql: SELECT 1 + validation-timeout: 2000 + idle-timeout: 600000 + max-lifetime: 1800000 + + ## JPA + jpa: + hibernate: + ddl-auto: none + properties: + hibernate: + jdbc: + lob: + non_contextual_creation: true + format_sql: false + show_sql: true + + servlet: + multipart: + max-file-size: 20MB + max-request-size: 20MB + +## Auth +jwt: + secret: + key: ${EATSSU_JWT_SECRET} + token-validity-in-seconds: 86400 + refresh-token-validity-in-seconds: 604800 + +#S3 +cloud: + aws: + credentials: + accessKey: ${EATSSU_AWS_ACCESS_KEY_DEV} + secretKey: ${EATSSU_AWS_SECRET_KEY_DEV} + s3: + bucket: eatssu-bucket + region: + static: ap-northeast-2 + stack: + auto: false + +#Slack +slack: + token: ${EATSSU_SLACK_TOKEN} + +#Swagger +swagger: + url: https://dev.eat-ssu.store + description: Test Server Swagger API + +springdoc: + swagger-ui: + path: /swagger-ui.html + groups-order: DESC + operationsSorter: method + disable-swagger-default-url: true + display-request-duration: true + api-docs: + path: /v3/api-docs + show-actuator: true + default-consumes-media-type: application/json + default-produces-media-type: application/json + paths-to-match: + - /** + +logging: + level: + root: INFO + com.zaxxer.hikari: INFO + +management: + endpoint: + metrics: + enabled: true + prometheus: + enabled: true + + endpoints: + web: + exposure: + include: health, info, metrics, prometheus diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml new file mode 100644 index 00000000..be1eb0c4 --- /dev/null +++ b/src/main/resources/application-local.yml @@ -0,0 +1,96 @@ +## port number +server: + port: 9000 + env: local + + +spring: + ## Database + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: ${EATSSU_DB_URL_DEV} + username: ${EATSSU_DB_USERNAME} + password: ${EATSSU_DB_PASSWORD} + + ## JPA + jpa: + hibernate: + ddl-auto: none + properties: + hibernate: + jdbc: + lob: + non_contextual_creation: true + format_sql: true + show_sql: false + + servlet: + multipart: + max-file-size: 20MB + max-request-size: 20MB + +## Auth +jwt: + secret: + key: ${EATSSU_JWT_SECRET} + token-validity-in-seconds: 86400 + refresh-token-validity-in-seconds: 259200 + +#S3 +cloud: + aws: + credentials: + accessKey: ${EATSSU_AWS_ACCESS_KEY_DEV} + secretKey: ${EATSSU_AWS_SECRET_KEY_DEV} + s3: + bucket: eatssu-bucket + region: + static: ap-northeast-2 + stack: + auto: false + +#Slack +slack: + token: ${EATSSU_SLACK_TOKEN} + +#Swagger +swagger: + url: http://localhost:9000 + description: Test Server Swagger API + +springdoc: + swagger-ui: + # Swagger UI + path: /swagger-ui.html + # Group + groups-order: DESC + # API + operationsSorter: method + # Swagger UI + disable-swagger-default-url: true + # API + display-request-duration: true + api-docs: + path: /v3/api-docs + show-actuator: true + default-consumes-media-type: application/json + default-produces-media-type: application/json + paths-to-match: + - /** + +logging: + level: + root: INFO + com.zaxxer.hikari: INFO + +management: + endpoint: + metrics: + enabled: true + prometheus: + enabled: true + + endpoints: + web: + exposure: + include: health, info, metrics, prometheus diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml new file mode 100644 index 00000000..47a2e062 --- /dev/null +++ b/src/main/resources/application-prod.yml @@ -0,0 +1,106 @@ +## port number +server: + port: 9000 + env: prod + + +spring: + ## Database + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: ${EATSSU_DB_URL_PROD} + username: ${EATSSU_DB_USERNAME} + password: ${EATSSU_DB_PASSWORD} + hikari: + maximum-pool-size: 200 + minimum-idle: 20 + connection-timeout: 2500 + connection-init-sql: SELECT 1 + validation-timeout: 2000 + idle-timeout: 600000 + max-lifetime: 1500000 + + ## JPA + jpa: + hibernate: + ddl-auto: none + properties: + hibernate: + jdbc: + lob: + non_contextual_creation: true + format_sql: true + show_sql: false + + servlet: + multipart: + max-file-size: 20MB + max-request-size: 20MB + +## Auth +jwt: + secret: + key: ${EATSSU_JWT_SECRET} + token-validity-in-seconds: 86400 + refresh-token-validity-in-seconds: 604800 + +#S3 +cloud: + aws: + credentials: + accessKey: ${EATSSU_AWS_ACCESS_KEY_PROD} + secretKey: ${EATSSU_AWS_SECRET_KEY_PROD} + s3: + bucket: eatssu-prod-bucket + region: + static: ap-northeast-2 + stack: + auto: false + +#Slack +slack: + token: ${EATSSU_SLACK_TOKEN} + +#Swagger +swagger: + url: https://eat-ssu.store + description: Prod-Server url + +springdoc: + swagger-ui: + # Swagger UI + path: /swagger-ui.html + # Group + groups-order: DESC + # API + operationsSorter: method + # Swagger UI + disable-swagger-default-url: true + # API + display-request-duration: true + api-docs: + path: /v3/api-docs + show-actuator: true + default-consumes-media-type: application/json + default-produces-media-type: application/json + paths-to-match: + - /** + +logging: + level: + root: INFO + com.zaxxer.hikari: INFO + + +management: + endpoint: + metrics: + enabled: true + prometheus: + enabled: true + + endpoints: + web: + exposure: + include: health, info, metrics, prometheus + diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml new file mode 100644 index 00000000..e6835a44 --- /dev/null +++ b/src/main/resources/application-test.yml @@ -0,0 +1,74 @@ +## port number +server: + port: 9000 + + +spring: + ## Database + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: ${EATSSU_DB_URL_TEST} + username: ${EATSSU_DB_USERNAME_TEST} + password: ${EATSSU_DB_PASSWORD_TEST} + + ## JPA + jpa: + hibernate: + ddl-auto: update + properties: + hibernate: +# jdbc: + lob: + non_contextual_creation: true + format_sql: true + show_sql: true + dialect: org.hibernate.dialect.MySQLDialect + + servlet: + multipart: + max-file-size: 20MB + max-request-size: 20MB + +## Auth +jwt: + secret: + key: ${EATSSU_JWT_SECRET_TEST} + token-validity-in-seconds: 86400 + refresh-token-validity-in-seconds: 259200 + +#S3 +cloud: + aws: + credentials: + accessKey: ${EATSSU_AWS_ACCESS_KEY_PROD} + secretKey: ${EATSSU_AWS_SECRET_KEY_PROD} + s3: + bucket: eatssu-dev-bucket + region: + static: ap-northeast-2 + stack: + auto: false + +#Slack +slack: + token: ${EATSSU_SLACK_TOKEN} + +#Swagger +swagger: + url: http://localhost:9000 + description: Test Server Swagger API + +springdoc: + swagger-ui: + path: /swagger-ui.html + groups-order: DESC + operationsSorter: method + disable-swagger-default-url: true + display-request-duration: true + api-docs: + path: /v3/api-docs + show-actuator: true + default-consumes-media-type: application/json + default-produces-media-type: application/json + paths-to-match: + - /** \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 00000000..fc14e1c2 --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,6 @@ +spring: + profiles: +# include : prod +# include : dev + include : local +# include: test From ab2fd95fefe904b415adfb69775ee6a201782c1e Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Mon, 23 Jun 2025 23:00:27 +0900 Subject: [PATCH 2/5] =?UTF-8?q?feat:=20Swagger=20UI=20=EA=B2=BD=EB=A1=9C?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Swagger UI의 경로를 "/swagger-ui.html"로 변경하여 리소스 접근을 개선함. --- .../ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index 8827919a..341d0146 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -23,7 +23,7 @@ @RequiredArgsConstructor public class SecurityConfig { private static final String[] RESOURCE_LIST = { - "/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**","/oauths/valid/token", "/admin/img/**", "/css/**", "/js/**", + "/swagger-ui.html", "/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**","/oauths/valid/token", "/admin/img/**", "/css/**", "/js/**", "/favicon.ico", "/error/**", "/webjars/**", "/h2-console/**" }; From 8943439255cf467299316b8407b7c4fce0dec550 Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Tue, 24 Jun 2025 10:46:27 +0900 Subject: [PATCH 3/5] =?UTF-8?q?feat:=20=EA=B0=9C=EB=B3=84=20=EB=B0=B0?= =?UTF-8?q?=ED=8F=AC=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EB=A5=BC=20=EC=9C=84?= =?UTF-8?q?=ED=95=9C=20GitHub=20Actions=20=EC=9B=8C=ED=81=AC=ED=94=8C?= =?UTF-8?q?=EB=A1=9C=EC=9A=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 새로운 워크플로우 파일인 individual-deploy-test.yml을 추가하여 pull request 시 자동으로 배포 테스트를 수행하도록 설정. - 개발 환경에 맞춘 JDK 설정, Gradle 캐싱, Docker 빌드 및 배포 스크립트를 포함함. - application-dev.yml, application-local.yml, application-prod.yml 파일에서 JWT 비밀 키를 환경별로 수정함. --- .github/workflows/individual-deploy-test.yml | 84 ++++++++++++++++++++ src/main/resources/application-dev.yml | 2 +- src/main/resources/application-local.yml | 2 +- src/main/resources/application-prod.yml | 2 +- 4 files changed, 87 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/individual-deploy-test.yml diff --git a/.github/workflows/individual-deploy-test.yml b/.github/workflows/individual-deploy-test.yml new file mode 100644 index 00000000..c5498dd4 --- /dev/null +++ b/.github/workflows/individual-deploy-test.yml @@ -0,0 +1,84 @@ +name: Individual Deploy Test + +on: + pull_request: + branches: [ "develop" ] + +permissions: + contents: read + +jobs: + CI-CD: + runs-on: ubuntu-latest + steps: + # JDK setting - github actions에서 사용할 JDK 설정 (aws 과 project의 java 버전과 별도로 관리) + - uses: actions/checkout@v3 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + + ## gradle caching (빌드 시간 줄이기) + - name: Gradle Caching + uses: actions/cache@v3 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- + + # dev profile을 활성화 시킵니다. + - name: Set dev profile + run: | + echo "spring: + profiles: + include: dev" > ./src/main/resources/application.yml + shell: bash + + # gradle chmod + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + # gradle build + - name: Build with Gradle + run: ./gradlew clean build -x test + + # docker login + - name: Docker Hub Login + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + # docker build & push to develop + - name: Docker build & push to dev server + run: | + docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu-dev . + docker push ${{ secrets.DOCKER_REPO }}/eatssu-dev + + ## deploy to develop + - name: Deploy to dev server + uses: appleboy/ssh-action@master + id: deploy-dev + with: + host: ${{ secrets.HOST_DEV }} # EC2 퍼블릭 IPv4 DNS + username: ${{ secrets.USERNAME }} # ubuntu + port: 22 + key: ${{ secrets.DEV_PRIVATE_KEY }} + script: | + sudo docker ps + sudo docker rm -f $(docker ps -qa) + sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-dev + sudo docker run -d -p 9000:9000 \ + -e EATSSU_DB_URL_DEV="${{ secrets.EATSSU_DB_URL_DEV }}" \ + -e EATSSU_DB_USERNAME="${{ secrets.EATSSU_DB_USERNAME }}" \ + -e EATSSU_DB_PASSWORD="${{ secrets.EATSSU_DB_PASSWORD }}" \ + -e EATSSU_JWT_SECRET_DEV="${{ secrets.EATSSU_JWT_SECRET_DEV }}" \ + -e EATSSU_AWS_ACCESS_KEY_DEV="${{ secrets.EATSSU_AWS_ACCESS_KEY_DEV }}" \ + -e EATSSU_AWS_SECRET_KEY_DEV="${{ secrets.EATSSU_AWS_SECRET_KEY_DEV }}" \ + -e EATSSU_SLACK_TOKEN="${{ secrets.EATSSU_SLACK_TOKEN }}" \ + ${{ secrets.DOCKER_REPO }}/eatssu-dev + sudo docker image prune -f diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 0b019a1d..73e0008b 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -40,7 +40,7 @@ spring: ## Auth jwt: secret: - key: ${EATSSU_JWT_SECRET} + key: ${EATSSU_JWT_SECRET_DEV} token-validity-in-seconds: 86400 refresh-token-validity-in-seconds: 604800 diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index be1eb0c4..1a4ffcd6 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -32,7 +32,7 @@ spring: ## Auth jwt: secret: - key: ${EATSSU_JWT_SECRET} + key: ${EATSSU_JWT_SECRET_LOCAL} token-validity-in-seconds: 86400 refresh-token-validity-in-seconds: 259200 diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 47a2e062..29d82927 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -40,7 +40,7 @@ spring: ## Auth jwt: secret: - key: ${EATSSU_JWT_SECRET} + key: ${EATSSU_JWT_SECRET_PROD} token-validity-in-seconds: 86400 refresh-token-validity-in-seconds: 604800 From d98bf3a77025bf066237d3de9ea6b9fe3e792684 Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Tue, 24 Jun 2025 11:12:06 +0900 Subject: [PATCH 4/5] =?UTF-8?q?feat:=20GitHub=20Actions=20=EC=9B=8C?= =?UTF-8?q?=ED=81=AC=ED=94=8C=EB=A1=9C=EC=9A=B0=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EB=B8=8C=EB=9E=9C=EC=B9=98=20=EC=9D=B4=EB=A6=84=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=EB=B0=8F=20=ED=99=98=EA=B2=BD=EB=B3=84=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - dev 브랜치 이름을 'develop'으로 변경 - dev 및 prod 프로파일 활성화 시 환경별 application.yml 파일 생성 방식 개선 - Docker 실행 시 환경 변수 추가로 보안 및 설정 강화 --- .github/workflows/gradle.yml | 42 +++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index ed350a06..4e01f21b 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -2,7 +2,7 @@ name: CI/CD github Actions & Docker on: push: - branches: [ "main", "dev" ] + branches: [ "main", "develop" ] permissions: contents: read @@ -30,22 +30,22 @@ jobs: restore-keys: | ${{ runner.os }}-gradle- - # 환경별 yml 파일 생성(1) - dev - - name: make dev server application.yml + # dev profile을 활성화 시킵니다. + - name: Set dev profile if: contains(github.ref, 'dev') run: | - cd ./src/main/resources - touch ./application.yml - echo "${{ secrets.YML_DEV }}" > ./application.yml + echo "spring: + profiles: + include: dev" > ./src/main/resources/application.yml shell: bash - # 환경별 yml 파일 생성(2) - prod - - name: make prod server application.yml + # prod profile을 활성화 시킵니다. + - name: Set prod profile if: contains(github.ref, 'main') run: | - cd ./src/main/resources - touch ./application.yml - echo "${{ secrets.YML_PROD }}" > ./application.yml + echo "spring: + profiles: + include: prod" > ./src/main/resources/application.yml shell: bash # gradle chmod @@ -91,7 +91,15 @@ jobs: sudo docker ps sudo docker rm -f $(docker ps -qa) sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-prod - sudo docker run -d -p 9000:9000 ${{ secrets.DOCKER_REPO }}/eatssu-prod + sudo docker run -d -p 9000:9000 \ + -e EATSSU_DB_URL_PROD="${{ secrets.EATSSU_DB_URL_PROD }}" \ + -e EATSSU_DB_USERNAME="${{ secrets.EATSSU_DB_USERNAME }}" \ + -e EATSSU_DB_PASSWORD="${{ secrets.EATSSU_DB_PASSWORD }}" \ + -e EATSSU_JWT_SECRET_PROD="${{ secrets.EATSSU_JWT_SECRET_PROD }}" \ + -e EATSSU_AWS_ACCESS_KEY_PROD="${{ secrets.EATSSU_AWS_ACCESS_KEY_PROD }}" \ + -e EATSSU_AWS_SECRET_KEY_PROD="${{ secrets.EATSSU_AWS_SECRET_KEY_PROD }}" \ + -e EATSSU_SLACK_TOKEN="${{ secrets.EATSSU_SLACK_TOKEN }}" \ + ${{ secrets.DOCKER_REPO }}/eatssu-prod sudo docker image prune -f ## deploy to develop @@ -108,5 +116,13 @@ jobs: sudo docker ps sudo docker rm -f $(docker ps -qa) sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-dev - sudo docker run -d -p 9000:9000 ${{ secrets.DOCKER_REPO }}/eatssu-dev + sudo docker run -d -p 9000:9000 \ + -e EATSSU_DB_URL_DEV="${{ secrets.EATSSU_DB_URL_DEV }}" \ + -e EATSSU_DB_USERNAME="${{ secrets.EATSSU_DB_USERNAME }}" \ + -e EATSSU_DB_PASSWORD="${{ secrets.EATSSU_DB_PASSWORD }}" \ + -e EATSSU_JWT_SECRET_DEV="${{ secrets.EATSSU_JWT_SECRET_DEV }}" \ + -e EATSSU_AWS_ACCESS_KEY_DEV="${{ secrets.EATSSU_AWS_ACCESS_KEY_DEV }}" \ + -e EATSSU_AWS_SECRET_KEY_DEV="${{ secrets.EATSSU_AWS_SECRET_KEY_DEV }}" \ + -e EATSSU_SLACK_TOKEN="${{ secrets.EATSSU_SLACK_TOKEN }}" \ + ${{ secrets.DOCKER_REPO }}/eatssu-dev sudo docker image prune -f From 1eb5d723fa7880db4c238ed9b6e7e16738c47a16 Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Tue, 24 Jun 2025 11:34:35 +0900 Subject: [PATCH 5/5] =?UTF-8?q?refactor:=20=EA=B0=9C=EB=B0=9C=20=EB=B0=8F?= =?UTF-8?q?=20=EC=9A=B4=EC=98=81=20=EC=84=9C=EB=B2=84=20=EB=B0=B0=ED=8F=AC?= =?UTF-8?q?=EB=A5=BC=20=EC=9C=84=ED=95=9C=20GitHub=20Actions=20=EC=9B=8C?= =?UTF-8?q?=ED=81=AC=ED=94=8C=EB=A1=9C=EC=9A=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 새로운 워크플로우 파일을 추가하여 main 및 develop 브랜치에 대한 CI/CD 파이프라인을 설정. - 환경별 application.yml 파일을 자동으로 생성하도록 구성. - Docker 이미지 빌드 및 푸시, 서버 배포를 위한 단계 포함. --- ...vidual-deploy-test.yml => deploy-test.yml} | 36 +++++++--------- .github/workflows/{gradle.yml => deploy.yml} | 42 +++++++------------ 2 files changed, 31 insertions(+), 47 deletions(-) rename .github/workflows/{individual-deploy-test.yml => deploy-test.yml} (71%) rename .github/workflows/{gradle.yml => deploy.yml} (77%) diff --git a/.github/workflows/individual-deploy-test.yml b/.github/workflows/deploy-test.yml similarity index 71% rename from .github/workflows/individual-deploy-test.yml rename to .github/workflows/deploy-test.yml index c5498dd4..509be4c4 100644 --- a/.github/workflows/individual-deploy-test.yml +++ b/.github/workflows/deploy-test.yml @@ -1,4 +1,4 @@ -name: Individual Deploy Test +name: Develop 브랜치 CI/CD 테스트 on: pull_request: @@ -8,19 +8,19 @@ permissions: contents: read jobs: - CI-CD: + test-develop-cicd: runs-on: ubuntu-latest steps: - # JDK setting - github actions에서 사용할 JDK 설정 (aws 과 project의 java 버전과 별도로 관리) - - uses: actions/checkout@v3 - - name: Set up JDK 17 + - name: 소스 코드 체크아웃 + uses: actions/checkout@v3 + + - name: JDK 17 설정 uses: actions/setup-java@v3 with: java-version: '17' distribution: 'temurin' - ## gradle caching (빌드 시간 줄이기) - - name: Gradle Caching + - name: Gradle 캐싱 uses: actions/cache@v3 with: path: | @@ -30,42 +30,36 @@ jobs: restore-keys: | ${{ runner.os }}-gradle- - # dev profile을 활성화 시킵니다. - - name: Set dev profile + - name: application.yml 생성 run: | echo "spring: profiles: include: dev" > ./src/main/resources/application.yml shell: bash - # gradle chmod - - name: Grant execute permission for gradlew + - name: gradlew 실행 권한 부여 run: chmod +x gradlew - # gradle build - - name: Build with Gradle + - name: Gradle 빌드 run: ./gradlew clean build -x test - # docker login - - name: Docker Hub Login + - name: Docker Hub 로그인 uses: docker/login-action@v2 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - # docker build & push to develop - - name: Docker build & push to dev server + - name: Docker 이미지 빌드 및 푸시 run: | docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu-dev . docker push ${{ secrets.DOCKER_REPO }}/eatssu-dev - ## deploy to develop - - name: Deploy to dev server + - name: 개발 서버에 배포 uses: appleboy/ssh-action@master id: deploy-dev with: - host: ${{ secrets.HOST_DEV }} # EC2 퍼블릭 IPv4 DNS - username: ${{ secrets.USERNAME }} # ubuntu + host: ${{ secrets.HOST_DEV }} + username: ${{ secrets.USERNAME }} port: 22 key: ${{ secrets.DEV_PRIVATE_KEY }} script: | diff --git a/.github/workflows/gradle.yml b/.github/workflows/deploy.yml similarity index 77% rename from .github/workflows/gradle.yml rename to .github/workflows/deploy.yml index 4e01f21b..a34b0285 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/deploy.yml @@ -1,4 +1,4 @@ -name: CI/CD github Actions & Docker +name: EAT-SSU Server 개발 & 운영 서버 배포 파이프라인 on: push: @@ -9,18 +9,17 @@ permissions: jobs: CI-CD: + name: CI/CD runs-on: ubuntu-latest steps: - # JDK setting - github actions에서 사용할 JDK 설정 (aws 과 project의 java 버전과 별도로 관리) - uses: actions/checkout@v3 - - name: Set up JDK 17 + - name: JDK 17 설치 uses: actions/setup-java@v3 with: java-version: '17' distribution: 'temurin' - ## gradle caching (빌드 시간 줄이기) - - name: Gradle Caching + - name: Gradle 캐싱 uses: actions/cache@v3 with: path: | @@ -30,8 +29,7 @@ jobs: restore-keys: | ${{ runner.os }}-gradle- - # dev profile을 활성화 시킵니다. - - name: Set dev profile + - name: dev 프로필 설정 if: contains(github.ref, 'dev') run: | echo "spring: @@ -39,8 +37,7 @@ jobs: include: dev" > ./src/main/resources/application.yml shell: bash - # prod profile을 활성화 시킵니다. - - name: Set prod profile + - name: prod 프로필 설정 if: contains(github.ref, 'main') run: | echo "spring: @@ -48,42 +45,36 @@ jobs: include: prod" > ./src/main/resources/application.yml shell: bash - # gradle chmod - - name: Grant execute permission for gradlew + - name: gradlew 실행 권한 부여 run: chmod +x gradlew - # gradle build - - name: Build with Gradle + - name: Gradle로 빌드 run: ./gradlew clean build -x test - # docker login - - name: Docker Hub Login + - name: Docker Hub 로그인 uses: docker/login-action@v2 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - # docker build & push to production - - name: Docker build & push to prod + - name: prod 용 Docker 빌드 및 푸시 if: contains(github.ref, 'main') run: | docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu-prod . docker push ${{ secrets.DOCKER_REPO }}/eatssu-prod - # docker build & push to develop - - name: Docker build & push to dev server + - name: dev 서버 용 Docker 빌드 및 푸시 if: contains(github.ref, 'dev') run: | docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu-dev . docker push ${{ secrets.DOCKER_REPO }}/eatssu-dev - ## deploy to production - - name: Deploy to prod + - name: prod에 배포 uses: appleboy/ssh-action@master id: deploy-prod if: contains(github.ref, 'main') with: - host: ${{ secrets.HOST_PROD }} # EC2 퍼블릭 IPv4 DNS + host: ${{ secrets.HOST_PROD }} username: ubuntu key: ${{ secrets.PROD_PRIVATE_KEY }} envs: GITHUB_SHA @@ -102,14 +93,13 @@ jobs: ${{ secrets.DOCKER_REPO }}/eatssu-prod sudo docker image prune -f - ## deploy to develop - - name: Deploy to dev server + - name: dev 서버에 배포 uses: appleboy/ssh-action@master id: deploy-dev if: contains(github.ref, 'dev') with: - host: ${{ secrets.HOST_DEV }} # EC2 퍼블릭 IPv4 DNS - username: ${{ secrets.USERNAME }} # ubuntu + host: ${{ secrets.HOST_DEV }} + username: ${{ secrets.USERNAME }} port: 22 key: ${{ secrets.DEV_PRIVATE_KEY }} script: |