Skip to content

Commit

Permalink
deploy 배포 CI/CD 테스트 (#149)
Browse files Browse the repository at this point in the history
* style[api-server]: deploy 배포 CI/CD 테스트

* 머지 완료되었을 때만 실행되도록 수정 (#143)

* fix[api-server]: 깃허브 액션 작업 이름 수정

* fix[api-server]: 머지 완료되었을 때만 실행되도록 수정

* style[api-server]: 게이트웨이 공백 수정 (CI/CD 테스트)

* fix[api-server]: 추첨, 선착순 서버 머지 완료되었을 때만 실행되도록 수정

* github readme추가 (#147)

* docs: 서버 아키텍처 이미지 추가

* docs: 배포 아키텍처 이미지 추가

* CI-CD 파이프라인 개선 (#148)

* feat[api-server]: swagger 업로드 파이프라인 추가

* fix[api-server]: swagger 배포를 분리

* style[api-server]: 변경사항 테스트

---------

Co-authored-by: 유성욱 <[email protected]>
  • Loading branch information
ysndy and starwook authored Aug 26, 2024
1 parent cc35422 commit a980016
Show file tree
Hide file tree
Showing 7 changed files with 102 additions and 49 deletions.
12 changes: 12 additions & 0 deletions .github/workflows/api-lottery-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,18 @@ jobs:
run: |
./gradlew --info lottery:test
- name: List files to be uploaded
run: |
echo "Files in lottery/build/generated-snippets/:"
ls -la lottery/build/generated-snippets/
# 스웨거 소스 업로드
- name: Upload multiple files as an artifact
uses: actions/upload-artifact@v3
with:
name: lottery-snippets
path: lottery/build/generated-snippets/*

# 테스트 후 Result를 보기위해 Publish Unit Test Results step 추가
- name: Publish Unit Test Results
uses: EnricoMi/publish-unit-test-result-action@v1
Expand Down
19 changes: 0 additions & 19 deletions .github/workflows/api-lottery-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -70,25 +70,6 @@ jobs:
- name: Grant execute permission for gradlew
run: chmod +x gradlew

# 테스트 후 스웨어 문서를 생성한다.
- name: Generate Swagger Document
run: |
./gradlew --info test
./gradlew mergeApiSpecs
./gradlew openapi3
./gradlew customGenerateSwaggerUI
ls
# 스웨거를 업로드한다.
- name: Upload to S3
uses: jakejarvis/s3-sync-action@master
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_S3_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_S3_SECRET_ACCESS_KEY }}
AWS_REGION: 'ap-northeast-2' # 리전 정보
SOURCE_DIR: 'swagger-ui-watermelon' # 업로드할 파일들이 위치한 로컬 디렉토리
AWS_S3_BUCKET: 'watermelon-s3-bucket' # S3 버킷 이름

# 애플리케이션을 Build 한다.
- name: 🔧 Build Spring server
run: |
Expand Down
12 changes: 12 additions & 0 deletions .github/workflows/api-order-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,18 @@ jobs:
- name: Test
run: ./gradlew --info order:test

- name: List files to be uploaded
run: |
echo "Files in order/build/generated-snippets/:"
ls -la order/build/generated-snippets/
# 스웨거 소스 업로드
- name: Upload multiple files as an artifact
uses: actions/upload-artifact@v3
with:
name: order-snippets
path: order/build/generated-snippets/*

# 테스트 후 Result를 보기위해 Publish Unit Test Results step 추가
- name: Publish Unit Test Results
uses: EnricoMi/publish-unit-test-result-action@v1
Expand Down
19 changes: 0 additions & 19 deletions .github/workflows/api-order-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -70,25 +70,6 @@ jobs:
- name: Grant execute permission for gradlew
run: chmod +x gradlew

# 테스트 후 스웨어 문서를 생성한다.
- name: Generate Swagger Document
run: |
./gradlew --info test
./gradlew mergeApiSpecs
./gradlew openapi3
./gradlew customGenerateSwaggerUI
ls
# 스웨거를 업로드한다.
- name: Upload to S3
uses: jakejarvis/s3-sync-action@master
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_S3_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_S3_SECRET_ACCESS_KEY }}
AWS_REGION: 'ap-northeast-2' # 리전 정보
SOURCE_DIR: 'swagger-ui-watermelon' # 업로드할 파일들이 위치한 로컬 디렉토리
AWS_S3_BUCKET: 'watermelon-s3-bucket' # S3 버킷 이름

# 애플리케이션을 Build 한다.
- name: 🔧 Build Spring server
run: |
Expand Down
54 changes: 54 additions & 0 deletions .github/workflows/swagger.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
name: Order-Deploy

on:
pull_request:
branches:
- deploy
types:
- closed
paths:
- "lottery/**"
- "order/**"
- "common/**"

jobs:
test:
runs-on: ubuntu-latest

steps:

# 스니펫을 불러온다.
- name: Download multiple files as an artifact
uses: actions/download-artifact@v3
with:
name: order-snippets
path: order/build/generated-snippets/

- name: Download multiple files as an artifact
uses: actions/download-artifact@v3
with:
name: lottery-snippets
path: lottery/build/generated-snippets/

- name: Verify files downloaded
run: |
echo "Download Files"
ls -la order/build/generated-snippets/
ls -la lottery/build/generated-snippets/
- name: Generate Swagger Document
run: |
./gradlew mergeApiSpecs
./gradlew openapi3
./gradlew customGenerateSwaggerUI
ls
# 스웨거를 업로드한다.
- name: Upload to S3
uses: jakejarvis/s3-sync-action@master
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_S3_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_S3_SECRET_ACCESS_KEY }}
AWS_REGION: 'ap-northeast-2' # 리전 정보
SOURCE_DIR: 'swagger-ui-watermelon' # 업로드할 파일들이 위치한 로컬 디렉토리
AWS_S3_BUCKET: 'watermelon-s3-bucket' # S3 버킷 이름
34 changes: 23 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,21 @@
# 협업 관련

## 📌 github 규칙

- main에 커밋 금지(보호 걸어놓음, 메인 빌드용)
- 브랜치 네이밍 컨벤션 준수
- 이슈 번호
- `WB-1`
- 이슈 번호
- `WB-1`

## 📌 이슈 관리

- [JIRA 활용](https://watermelon-clap.atlassian.net/jira/software/projects/CLAP/boards/1)
- 에픽을 스프린트 단위로 한다.
- 에픽은 도메인 단위로 한다.
- 스프린트는 1주일의 주기를 가진다.
- 스프린트 시작 시 백로그에서 이번주에 진행할 작업을 가져와 스프린트에 채운다.
- 스프린트 종료 시 회고를 통해 작업 진행속도 및 작업 분배에 대해 논의한다.
- 에픽을 스프린트 단위로 한다.
- 에픽은 도메인 단위로 한다.
- 스프린트는 1주일의 주기를 가진다.
- 스프린트 시작 시 백로그에서 이번주에 진행할 작업을 가져와 스프린트에 채운다.
- 스프린트 종료 시 회고를 통해 작업 진행속도 및 작업 분배에 대해 논의한다.

<img width="691" alt="image" src="https://github.com/user-attachments/assets/637d80b6-e830-4dea-aea1-e49798aa4c3a">

## 📌 커밋 컨벤션
Expand Down Expand Up @@ -42,11 +43,13 @@ res: 리소스 관련 (String, Color 등) 파일 `안드로이드 한정`
```

### 서버 종류 설명

```
[api-server] : api 서버
[gateway-server] : gateway 서버
[all] : 레포 전체 적용 ex) README
```

### 커밋 한번에는 100줄 이상의 변화를 넣지 않는다.

<br/>
Expand All @@ -58,7 +61,6 @@ res: 리소스 관련 (String, Color 등) 파일 `안드로이드 한정`
- 최소 한명의 Reviewer을 설정한다.
- 해당 Reviewer의 Approve와 빌드 및 테스트 성공이 되었을 경우에만 Merge 가능


<br/>

## 📌 PR 템플릿
Expand Down Expand Up @@ -88,12 +90,22 @@ res: 리소스 관련 (String, Color 등) 파일 `안드로이드 한정`
# 설계

## 📌 ERD

<img width="1376" alt="image" src="https://github.com/user-attachments/assets/07372ccf-ff02-4b97-9583-ec6cdaef8511">

## 📌 API 명세서

<img width="715" alt="image" src="https://github.com/user-attachments/assets/225a4b1c-4cf6-4577-9035-6922136f127f">
<img width="712" alt="image" src="https://github.com/user-attachments/assets/688df485-feaf-4176-a70b-77874658803e">

## 📌 개발 중점 사항
1. 비용, 관리해야하는 리소스의 최소화
2. 테스트를 기반으로 동작하는 안정적인 서비스 배포 (Spring Rest Docs 사용)

1. 기획, 유저의 입장을 충분히 이해하며 개발하기
2. 비용, 관리해야하는 리소스의 최소화
3. 테스트를 기반으로 동작하는 안정적인 서비스 배포 (Spring Rest Docs 사용)

## 📌 아키텍처
### 서버 아키텍처
![_최종_아키텍처 drawio (1)](https://github.com/user-attachments/assets/f5b3034c-4733-43a7-aa47-236213145130)
### 배포 아키텍처
<img width="701" alt="스크린샷 2024-08-26 오후 2 39 01" src="https://github.com/user-attachments/assets/095964c5-8a99-4e2c-aeac-91fa4e6841f2">
1 change: 1 addition & 0 deletions common/src/main/java/com/watermelon/server/S3Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,5 @@ public AmazonS3 amazonS3() {
.withRegion(region)
.build();
}

}

0 comments on commit a980016

Please sign in to comment.