Skip to content

Commit f0315c8

Browse files
char-ybdbscks97kwanok
authored
v0.0.2 (#109)
* chore: 프로젝트 세팅 (#2) * chore: issue, pr 템플릿 작성 * chore: CODEOWNERS 작성 * chore: editorconfig 작성 * chore: chore 이슈 템플릿 about 내용 수정 * chore: develop PR on check workflow 작성 (#7) * chore: develop PR on check workflow 작성 * fix: jdk zulu로 변경 * chore: slack webhook Test * chore: slack webhook Test * chore: slack webhook Test * chore: cache-read-only false 옵션 * chore: Spring Actuator 구성 (#8) * chore: domain 구조 아키텍처 구성 (#12) * chore: domain 구조 아키텍처 구성 * chore: global.config 추가 * chore: SwaggerConfig 작성 (#14) * chore: SwaggerConfig 작성 * fix: Api path versioning 제거 및 SwaggerConfig 수정 * fix: 상수 컨벤션 수정 * [WALWAL-104] Spotless 구성 (#19) * chore: pre-commit, spotless 구성 * chore: pre-commit 실행 모드 추가 * fix: spotlessApply * chore: googleJavaFormat aosp * chore: googleJavaFormat aosp * fix: spotlessApply * fix: spotlessApply version test * fix: spotlessApply * [WALWAL-84] jacoco 세팅 추가 (#16) * chore: jacoco 세팅 추가 * chore: config, resources, QDomains 커버리지 제외 및 reports 커스텀 경로 세팅 * feat: BaseTimeEntity 추가 (#22) * [WALWAL-88] 회원 엔티티 구성 (#26) * [WALWAL-108] Querydsl 환경 구성 (#25) * chore: querydsl config 추가 * chore: openfeign Querydsl 의존성 변경 * fix: spotlessApply * fix: spotlessApply * fix: spotlessApply * [WALWAL-114] record -> class 변경 (#30) * fix: record -> class 변경 * fix: profileImageUrl getter 삭제 * feat: Schema Swagger 프로퍼티 * [WALWAL-109] GlobalResponse를 위한 RestControllerAdvice 세팅 (#23) * chore: GlobalResponse를 위한 RestControllerAdvice 세팅 * fix: Response 형식 변경 및 ResponseEntityExceptionHandler 상속 * fix: status상태에 따른 sucess, fail 응답처리 * fix: ApiResponse record형식으로 수정 * chore: develop 브랜치 머지 및 spotless적용 * fix: 인텔리제이 자동import제거설정변경 * fix: 생성자 대신 RequiredArgsConstructor 어노테이션 통일 * [WALWAL-115] 미션 엔티티 구현 (#32) feature: 미션 엔티티 구현 * [WALWAL-106] fixtureMonkey 도입 (#28) * chore: fixtureMonkey 도입 * fix: order items 갯수 제한 수정 * chore: redis 환경 구성 (#37) * [WALWAL-113] SecurityConfig 및 유틸리티 구현 (#35) * chore: security 구성 * fix: CookieCsrfTokenRepository 활성화 * chore: csrf 옵션 임시 삭제 * fix: SwaggerUrlConstants 수정 * [WALWAL-116] 미션 기록 엔티티 구현 (#34) * feature: 미션 기록 엔티티 구현 * fix: Record -> MissionRecord로 클래스명 수정 * fix: mission_title 대신 proxy객체를 통해서 title가져오기 * [WALWAL-110] elastic beanstalk dev 서버 workflow 작성 (#38) * chore: dev workflow test * chore: dev workflow test * chore: dev workflow test * chore: dev workflow test * chore: dev workflow test * chore: dev workflow 1차 작성 * fix: current time 삭제 * fix: job name 수정 * fix: docker compose 및 env 파일 패키징 항목 삭제 * hotfix: Elastic BeanStalk 배포 version Label (#41) * [WALWAL-132] application yml 분리 (#42) * chore: mysql 구성 및 yml 분리 * chore: s3 property 추가 * [WALWAL-135] missionrecord crud 구현 (#46) * feature: 미션 기록 생성 구현 * fix: record response에Title추가 * fix: pathvariable 제거 * feature: 미션 기록 삭제 구현 * fix: ApiResponse적용 * fix: @tag어노테이션 추가 및 컨트롤러반환값 수정 * refactor: 단일 미션 조회 메서드 분리 * [WALWAL-138]: mission crud 구현 (#45) * feature: mission crud 구현 * fix: review resolve * fix: id 네이밍 수정 및 서비스 응답 클래스 변경 * [WALWAL-142] EB docker-compose 구성 (#50) * chore: docker-compose 테스트 * chore: docker-compose aws json 테스트 * chore: EB deploy envs 삭제 * chore: docker-compose aws json 배포 테스트 * chore: docker-compose aws json 배포 테스트 및 테스트 케이스 수정 * fix: version lavel 수정 * fix: docker compose로 배포 테스트 * fix: docker compose로 배포 테스트 * chore: docker-compose aws json 배포 테스트 * chore: docker-compose aws json v3 배포 테스트 * chore: docker-compose aws json v3 배포 테스트 * fix: docker compose로 배포 테스트 * fix: docker compose로 배포 테스트 * fix: docker compose로 배포 테스트 * fix: docker compose로 배포 테스트 * fix: docker compose로 배포 테스트 * chore: 슬랙 봇 테스트 및 compose port 설정 * chore: docker compose ports 테스트 * chore: docker compose ports 테스트 * chore: nginx test * chore: nginx test * chore: nginx test * chore: Dockerrun.aws.json 테스트 * chore: Dockerrun.aws.json 테스트 * chore: docker compose 테스트 * fix: nginx volumes endpoint * fix: nginx conf workflow 삭제 테스트 * fix: bucket 업로드 삭제 테스트 * fix: version-label 현재 시각 versioning * fix: bucket 업로드 원복 * fix: nginx conf workflow 원복 테스트 * fix: push branch develop으로 변경 * fix: Dockerrun json 삭제 * [WALWAL-81] 애플 로그인 구현 (#47) * feat: RefreshToken 및 DTO 정의 * feat: apple server 통신 * feat: Apple 로그인 및 회원가입 * fix: 내 정보 조회 API 수정 * refactor: 로그인 로직 분리 * feat: 로직 개선 * chore: securityConfig auth 엔드포인트 추가 * fix: conflict 해결 * refactor: Apple 로그인 리팩토링 * refactor: Apple 로그인 리팩토링 및 마케팅 동의 여부 컬럼 추가 * feat: swagger default 유저 및 security JWT Filter 적용 * fix: csrf 이슈 * fix: csrf 이슈 * refactor: Service 로직 코드 분리 * fix: User fixtureMonkey PersonName 수정 * fix: Swagger 수정 * refactor: 미사용 DTO 및 네이밍 수정 * refactor: 네이밍 수정 및 println 삭제 * fix: yml include 추가 * chore: env sample 프로퍼티 추가 * fix: Apple Error Code 정의 * fix: 회원가입 로직 수정 및 토큰 로직 수정 * fix: socialLogin 메서드 orElseGet 수정 * refactor: RefreshToken 생성 로직 중복 * fix: 미사용 메서드 삭제 * fix: Apple PrivateKey 만료 시간 5분 설정 * refactor: apple Private Key 싱글톤 패턴 * refactor: apple Private Key 싱글톤 패턴으로 미사용 메서드 삭제 * refactor: 변수 상수화 * [WALWAL-148] Dev, Prod 환경 분리 (#56) * feat: Environment 환경 분리 * test: dev profile swagger permitAll * fix: fixtureMokey 수정 * refactor: dev 환경 배포 테스트 * refactor: dev 환경 배포 테스트 * fix: fixtureMokey 수정 * test: dev profile swagger permitAll * refactor: dev 환경 배포 테스트 * fix: push branch develop으로 변경 * fix: profile 예외 메세지 * [WALWAL-145] missionrecord calendarview (#52) * [WALWAL-122] 이미지 업로드 기능 (#58) * feat: Image 도메인 및 DTO 정의 * feat: aws 의존성 추가 및 Image Controller, Service 추가 * fix: image 로직 임시 커밋 * [WALWAL-148] Dev, Prod 환경 분리 (#56) * feat: Environment 환경 분리 * test: dev profile swagger permitAll * fix: fixtureMokey 수정 * refactor: dev 환경 배포 테스트 * refactor: dev 환경 배포 테스트 * fix: fixtureMokey 수정 * test: dev profile swagger permitAll * refactor: dev 환경 배포 테스트 * fix: push branch develop으로 변경 * fix: profile 예외 메세지 * chore: s3 Config 추가 * feat: Member 이미지 업로드 기능 * fix: 이미지 업로드 로직 수정 * refactor: @dbscks97 피드백 반영 * refactor: @kwanok 피드백 반영 * fix: MissionCreateRequest test 코드 * [WALWAL-152] register Request Body 불필요한 필드 삭제 (#62) * fix: register Request Body * fix: 마케팅 수신 동의여부 삭제 * [WALWAL-147] 오늘의 미션 API 추가 (#53) * feat: 오늘의 미션 엔드포인트 추가 * fix: 시큐어 랜덤으로 보안패치 * fix: 리뷰 반영, 테스트 이름 수정, jpa 쿼리 수정 * fix: 변수명 수정 missionIds * fix: QueryDSL로 변경 * fix: QueryDSL 리뷰 반영 * fix: Error Code 수정 * [WALWAL-153] 미션 n번째 카운트 기능 추가 (#64) * feat: 수행한 총 미션 기록 수 * fix: 엔드포인트 수정 * fix: 메서드 명 * [WALWAL-150] missionrecord imageupload 기능 구현 (#66) * feature: 미션참여 API구현 * feature: 미션 탭 상태 조회 API 구현 * feature: 완료된 미션이미지제공 API 구현 * feature: 미션 기록 업로드 및 저장, 테스트 코드 작성 * fix: PR 수정사항 반영 * fix: 안쓰는 Response 및 스키마 수정 * refactor: 미션 탭 조회 시 이미지데이터 포함 * fix: 이미지URL 저장로직 수정 * fix: application.yml 수정 * fix: Test프로파일 설정 * refactor: 미션기록 Response에 recordId추가 및 이미지url수정 * [WALWAL-151] 데일리미션 일러스트, 컬러값 추가 (#71) * feature: 데일리미션 일러스트, 컬러값 추가 * fix: MissionControllertest코드 수정 * [WALWAL-155] 카카오 로그인/회원가입 구현 (#68) * feat: 카카오 로그인/회원가입 * fix: println 삭제 * fix: 임시 토큰 여부 판별 (#74) * [WALWAL-163] 배포 환경 메모리 제한 (#77) * [WALWAL-163] 배포 환경 메모리 제한 * fix: memory * [WALWAL-160] 미션 시작 시 동시성 문제 개선 (#75) * [WALWAL-157] 회원탈퇴 API (#82) * feat: 회원탈퇴 API * feat: 회원탈퇴 API redis deleteById * chore: 주석 * chore: 주석 처리 수정 * [WALWAL-154] PROD 운영 서버 워크플로 작성 (#85) * chore: PROD 배포 테스트 * fix: 변수 추가 * fix: minor tags 테스트 * fix: minor tags 테스트 * fix: minor tags 테스트 * fix: workflow version * hotfix: EC2 도커 단일 인스턴스 배포 (#90) * fix: docker deploy platform 수정 * fix: docker deploy platform 수정 * fix: 파일 copy test * fix: 파일 copy test * fix: 파일 copy test * fix: ec2-user 배포 테스트 * fix: ec2-user 배포 테스트 * fix: run script 삭제 * fix: ec2-user 테스트 * fix: ec2-user 테스트 * fix: ec2-user 테스트 * fix: versioning 테스트 * fix: 배포 테스트 * fix: 배포 테스트 * fix: 배포 테스트 * fix: 배포 테스트 * fix: 배포 테스트 * refactor: dev ec2 docker-compose deploy workflow * fix: docker compose image, container 수정 * feat: push branchs develop으로 변경 * [WALWAL-156] 팔로우 추가 및 취소, 조회 기능 (#86) * feat: 팔로우 추가, 삭제, 조회 API * test: Follow 테스트 코드 * fix: SRP 원칙 * [WALWAL-164] 닉네임 검증 (#81) * feat: 닉네임 검증 * fix: null 체크만 하도록 * [WALWAL-167] Mission Response 및 API PathVariable 수정 (#91) * fix: Mission Response 및 API PathVariable 수정 * fix: MissionController Test 수정 * [WALWAL-163] 스웨거 문서 이름 일관적으로 포매팅 (#79) * [WALWAL-163] 스웨거 문서 이름 일관적으로 포매팅 * fix: 스웨거 네이밍 * test: SecurityUtil 테스트 코드 추가 (#99) * test: RefreshToken 테스트 (#100) * fix: 온보딩 Default imageUrl 요청 필드 추가 (#101) * fix: Default imageUrl 입력 * fix: Default imageUrl empty 체크 * [WALWAL-165] FCM 푸시 알림 기능 구현 (#92) * feature: FCM 알림 API 서비스 구현 * fix: 앱 실행 시 토큰 타임스탬프 갱신수정 * fix: FcmResponseErrorType Enum으로 정리 * feature: 상수 static 선언 및 secrets 환경변수설정 * fix: removeInactiveTokens메서드 스케쥴러실행시간 수정 * fix: docker-compose 환경변수 수정 * fix: 미사용 메서드 삭제 * fix: fcmSendResponse 삭제 * fix: FcmController throw IOException 제거 * refactor: scheduled메서드 서비스분리 * fix: FIREBASE_CONFIG workflows수정 * fix: FIREBASE_CONFIG github secrets 사용 * fix: @EnableScheduling 어노테이션 추가 * fix: docker 환경변수 -> env 설정으로 변경 * fix: .env 파일 및 fcm.yml 수정 * fix: FIREBASE_CONFIG .env로 수정 * fix: fcm_token 객체 삭제 -> soft 삭제를 통해 데이터 보존 * feature: MulticastMessage 구현 * fix: env 변수 수정 * refactor: Transaction처리를위한 TokenService분리 * fix: sonarcloud 이슈 수정 * fix: Properties 적용 * fix: @MockBean추가 * [WALWAL-168] MissionRecord에 Text값 추가 (#103) * fix: MissionRecord에 Text값 추가 * fix: Test코드 mocking작업추가 * [WALWAL-149] Auth, Member 테스트 코드 작성 (#93) * test: MemberUtil 테스트 코드 추가 (#98) * test: MemberUtil 테스트 코드 추가 * refactor: MockitoExtension * chore: prod workflow 작성 (#108) --------- Co-authored-by: Park Yun Chan <[email protected]> Co-authored-by: kwanok noh <[email protected]>
1 parent 1b002aa commit f0315c8

File tree

73 files changed

+2145
-207
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+2145
-207
lines changed

.github/workflows/develop-build-deploy.yml

+73-43
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
strategy:
1515
matrix:
1616
java-version: [ 17 ]
17-
distribution: [ 'zulu' ]
17+
distribution: [ 'temurin' ]
1818
steps:
1919
- name: Checkout code
2020
uses: actions/checkout@v3
@@ -26,6 +26,10 @@ jobs:
2626
java-version: ${{ matrix.java-version }}
2727
distribution: ${{ matrix.distribution }}
2828

29+
# test 활용 목적의 container 실행
30+
- name: Start test docker container
31+
run: docker compose -f ./docker-compose-test.yaml up -d
32+
2933
- name: Grant execute permission for gradlew
3034
run: chmod +x ./gradlew
3135

@@ -38,53 +42,79 @@ jobs:
3842
--scan
3943
cache-read-only: ${{ github.ref != 'refs/heads/main' && github.ref != 'refs/heads/develop' }}
4044

41-
# Docker 이미지 빌드 및 도커 허브 푸시
42-
- name: Docker build & push
43-
run: |
44-
docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_TOKEN }}
45-
docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_IMAGE_NAME }} .
46-
docker push ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_IMAGE_NAME }}
45+
# Dockerhub 로그인
46+
- name: Login to Dockerhub
47+
uses: docker/login-action@v3
48+
with:
49+
username: ${{ secrets.DOCKERHUB_USERNAME }}
50+
password: ${{ secrets.DOCKERHUB_TOKEN }}
51+
52+
# Docker 메타데이터 추출
53+
- name: Extract Docker metadata
54+
id: metadata
55+
uses: docker/[email protected]
56+
env:
57+
DOCKERHUB_IMAGE_FULL_NAME: ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_IMAGE_NAME }}
58+
with:
59+
images: ${{ env.DOCKERHUB_IMAGE_FULL_NAME }}
60+
tags: |
61+
type=sha,prefix=
4762
48-
- name: Current Time
49-
uses: gerred/[email protected]
50-
id: current-time
63+
# Docker 이미지 빌드 및 도커허브로 푸시
64+
- name: Docker Build and Push
65+
uses: docker/build-push-action@v5
66+
with:
67+
context: .
68+
push: true
69+
tags: ${{ steps.metadata.outputs.tags }}
5170

52-
- name: Replace string
53-
uses: frabert/[email protected]
54-
id: format-time
71+
# 서버로 docker-compose 파일 전송
72+
- name: Copy docker-compose file to EC2
73+
uses: burnett01/[email protected]
5574
with:
56-
pattern: '[:\.]+'
57-
string: "${{ steps.current-time.outputs.time }}"
58-
replace-with: '-'
59-
flags: 'g'
75+
switches: -avzr --delete
76+
remote_host: ${{ secrets.EC2_HOST }}
77+
remote_user: ${{ secrets.EC2_USERNAME }}
78+
remote_key: ${{ secrets.EC2_PRIVATE_KEY }}
79+
path: docker-compose.yaml
80+
remote_path: /home/ec2-user/
6081

61-
- name: Prepare deployment package
62-
run: |
63-
zip -r deployment-package.zip docker-compose.yaml nginx/default.conf
82+
- name: Copy default.conf to EC2
83+
uses: burnett01/[email protected]
84+
with:
85+
switches: -avzr --delete
86+
remote_host: ${{ secrets.EC2_HOST }}
87+
remote_user: ${{ secrets.EC2_USERNAME }}
88+
remote_key: ${{ secrets.EC2_PRIVATE_KEY }}
89+
path: ./nginx
90+
remote_path: /home/ec2-user/
6491

65-
- name: Beanstalk Deploy
66-
uses: einaregilsson/beanstalk-deploy@v22
92+
# EC2로 배포
93+
- name: Deploy to EC2 Server
94+
uses: appleboy/[email protected]
95+
env:
96+
IMAGE_FULL_URL: ${{ steps.metadata.outputs.tags }}
97+
DOCKERHUB_IMAGE_NAME: ${{ env.DOCKERHUB_IMAGE_NAME }}
6798
with:
68-
aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }}
69-
aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
70-
existing_bucket_name: "walwal-server-dev-deployment"
71-
application_name: "walwal-dev"
72-
environment_name: "Walwal-dev-env"
73-
version_label: "walwal-dev-${{ steps.format-time.outputs.replaced }}"
74-
region: ap-northeast-2
75-
deployment_package: deployment-package.zip
76-
wait_for_environment_recovery: 180
99+
host: ${{ secrets.EC2_HOST }}
100+
username: ${{ secrets.EC2_USERNAME }}
101+
key: ${{ secrets.EC2_PRIVATE_KEY }}
102+
envs: IMAGE_FULL_URL, DOCKERHUB_IMAGE_NAME # docker-compose.yml 에서 사용할 환경 변수
103+
debug: true
104+
script: |
105+
echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login -u "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
106+
docker compose up -d
107+
docker exec -d nginx nginx -s reload
108+
docker image prune -a -f
77109
78-
# Slack 알림
79-
- name: Send Deploy Result to Slack
80-
uses: rtCamp/action-slack-notify@v2
110+
## Slack
111+
- name: Slack Alarm
112+
uses: 8398a7/action-slack@v3
113+
with:
114+
status: ${{ job.status }}
115+
author_name: GitHub-Actions CI/CD
116+
fields: repo,message,commit,author,ref,job,took
81117
env:
82-
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
83-
SLACK_USERNAME: 왈왈봇
84-
SLACK_COLOR: ${{ job.status == 'success' && 'good' || 'danger' }}
85-
SLACK_TITLE: "Deploy Summary - Develop"
86-
SLACK_MESSAGE: |
87-
- image tag: `${{ steps.metadata.outputs.tags }}`
88-
- build scan report: ${{ steps.gradle.outputs.build-scan-url }}
89-
- deploy status: ${{ job.status }}
90-
- deploy time: ${{ steps.current-time.outputs.time }}
118+
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} # required
119+
if: always() # Pick up events even if the job fails or is canceled.
120+

.github/workflows/develop-pull-request-on-check.yml

+5-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@ jobs:
1717
uses: actions/setup-java@v3
1818
with:
1919
java-version: ${{ matrix.java-version }}
20-
distribution: 'zulu'
20+
distribution: 'adopt'
21+
22+
# test 활용 목적의 container 실행
23+
- name: Start test docker container
24+
run: docker compose -f ./docker-compose-test.yaml up -d
2125

2226
- name: Grant execute permission for gradlew
2327
run: chmod +x ./gradlew

.github/workflows/production-build-deploy.yml

+73-53
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@ on:
55
tags:
66
- v*.*.*
77

8+
permissions:
9+
id-token: write
10+
contents: read
11+
812
env:
913
DOCKERHUB_IMAGE_NAME: walwal-server
10-
DOCKERHUB_IMAGE_FULL_NAME: ${{ secrets.DOCKERHUB_USERNAME }}/walwal-server
1114

1215
jobs:
1316
build-deploy:
@@ -17,15 +20,19 @@ jobs:
1720
matrix:
1821
java-version: [ 17 ]
1922
distribution: [ 'temurin' ]
20-
2123
steps:
22-
# 기본 체크아웃
24+
# 체크아웃
2325
- name: Checkout
24-
uses: actions/checkout@v3
26+
uses: actions/checkout@v4
2527

26-
# JDK를 17 버전으로 세팅
28+
# Docker 이미지 태그 세팅
29+
- name: Set up image-tag by GITHUB_SHA
30+
id: image-tag
31+
run: echo "value=$(cut -d'v' -f2 <<< ${GITHUB_REF#refs/*/})" >> $GITHUB_OUTPUT
32+
33+
# JDK 17 버전으로 세팅
2734
- name: Set up JDK 17
28-
uses: actions/setup-java@v3
35+
uses: actions/setup-java@v4
2936
with:
3037
java-version: ${{ matrix.java-version }}
3138
distribution: ${{ matrix.distribution }}
@@ -34,15 +41,24 @@ jobs:
3441
- name: Run chmod to make gradlew executable
3542
run: chmod +x ./gradlew
3643

44+
# Redis 컨테이너 실행
45+
- name: Start containers
46+
run: docker-compose -f ./docker-compose-test.yaml up -d
47+
3748
# Gradle 빌드
49+
- name: Setup Gradle
50+
uses: gradle/actions/setup-gradle@v3
51+
with:
52+
cache-read-only: ${{ github.ref != 'refs/heads/main' && github.ref != 'refs/heads/develop' }} # feature 브랜치는 캐시를 읽기 전용으로 설정
53+
cache-encryption-key: ${{ secrets.GRADLE_CACHE_ENCRYPTION_KEY }}
54+
add-job-summary-as-pr-comment: always
55+
build-scan-publish: true
56+
build-scan-terms-of-use-url: "https://gradle.com/help/legal-terms-of-use"
57+
build-scan-terms-of-use-agree: "yes"
58+
3859
- name: Build with Gradle
3960
id: gradle
40-
uses: gradle/gradle-build-action@v2
41-
with:
42-
arguments: |
43-
build
44-
--scan
45-
cache-read-only: ${{ github.ref != 'refs/heads/main' && github.ref != 'refs/heads/develop' }}
61+
run: ./gradlew build --configuration-cache
4662

4763
# Dockerhub 로그인
4864
- name: Login to Dockerhub
@@ -55,6 +71,8 @@ jobs:
5571
- name: Extract Docker metadata
5672
id: metadata
5773
uses: docker/[email protected]
74+
env:
75+
DOCKERHUB_IMAGE_FULL_NAME: ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_IMAGE_NAME }}
5876
with:
5977
images: ${{ env.DOCKERHUB_IMAGE_FULL_NAME }}
6078
tags: |
@@ -70,55 +88,57 @@ jobs:
7088
- name: Set up Docker Buildx
7189
uses: docker/setup-buildx-action@v3
7290

73-
# Docker 이미지 빌드 및 도커허브로 푸시
91+
# 이미지 빌드 및 Dockerhub에 푸시
7492
- name: Docker Build and Push
7593
uses: docker/build-push-action@v5
7694
with:
7795
context: .
78-
platforms: linux/arm64/v8
96+
platforms: linux/arm64
7997
push: true
80-
tags: ${{ steps.metadata.outputs.tags }}
81-
82-
- name: Current Time
83-
uses: gerred/[email protected]
84-
id: current-time
98+
tags: ${{ secrets.DOCKERHUB_USERNAME }}/walwal-server:${{ steps.image-tag.outputs.value }}
8599

86-
- name: Replace string
87-
uses: frabert/[email protected]
88-
id: format-time
100+
# AWS 로그인
101+
- name: Configure AWS Credentials
102+
uses: aws-actions/configure-aws-credentials@v4
89103
with:
90-
pattern: '[:\.]+'
91-
string: "${{ steps.current-time.outputs.time }}"
92-
replace-with: '-'
93-
flags: 'g'
104+
role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }}
105+
aws-region: ap-northeast-2
106+
output-config: true
107+
108+
# 복사 경로 환경변수 설정
109+
- name: Set up S3 copy path
110+
env:
111+
S3_DEPLOY_BUCKET_NAME: ${{ secrets.S3_DEPLOY_BUCKET_NAME }}
112+
run: echo "S3_COPY_PATH=$(echo s3://${S3_DEPLOY_BUCKET_NAME}/walwal-prod/docker-compose.yaml)" >> $GITHUB_ENV
94113

95-
- name: Prepare deployment package
96-
run: |
97-
zip -r deployment-package.zip docker-compose.yaml nginx/default.conf
114+
# S3로 docker-compose 파일 전송
115+
- name: Copy docker-compose file to S3
116+
run: aws s3 cp docker-compose.yaml ${{ env.S3_COPY_PATH }}
98117

99-
- name: Beanstalk Deploy
100-
uses: einaregilsson/beanstalk-deploy@v22
118+
- name: Deploy to EC2 Server
119+
uses: appleboy/ssh-action@master
120+
env:
121+
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
122+
IMAGE_FULL_URL: ${{ steps.metadata.outputs.tags }}
123+
with:
124+
host: ${{ secrets.EC2_HOST }}
125+
username: ${{ secrets.EC2_USERNAME }}
126+
key: ${{ secrets.EC2_PRIVATE_KEY }}
127+
envs: IMAGE_FULL_URL # docker-compose.yaml 에서 사용할 환경 변수
128+
script: |
129+
aws s3 cp ${{ env.S3_COPY_PATH }} docker-compose.yaml
130+
echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login -u "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
131+
docker pull ${{ env.IMAGE_FULL_URL }}
132+
docker compose up -d
133+
docker image prune -a -f
134+
135+
## Slack
136+
- name: Slack Alarm
137+
uses: 8398a7/action-slack@v3
101138
with:
102-
aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }}
103-
aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
104-
existing_bucket_name: "walwal-server-prod-deployment"
105-
application_name: "walwal-prod"
106-
environment_name: "Walwal-prod-env"
107-
version_label: "walwal-prod-${{ steps.format-time.outputs.replaced }}"
108-
region: ap-northeast-2
109-
deployment_package: deployment-package.zip
110-
wait_for_environment_recovery: 180
111-
112-
# Slack 알림
113-
- name: Send Deploy Result to Slack
114-
uses: rtCamp/action-slack-notify@v2
139+
status: ${{ job.status }}
140+
author_name: GitHub-Actions CI/CD
141+
fields: repo,message,commit,author,ref,job,took
115142
env:
116-
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
117-
SLACK_USERNAME: 왈왈봇
118-
SLACK_COLOR: ${{ job.status == 'success' && 'good' || 'danger' }}
119-
SLACK_TITLE: "Deploy Summary - Production"
120-
SLACK_MESSAGE: |
121-
- image tag: `${{ steps.metadata.outputs.tags }}`
122-
- build scan report: ${{ steps.gradle.outputs.build-scan-url }}
123-
- deploy status: ${{ job.status }}
124-
- deploy time: ${{ steps.current-time.outputs.time }}
143+
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} # required
144+
if: always() # Pick up events even if the job fails or is canceled.

Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM azul/zulu-openjdk:17-latest
1+
FROM eclipse-temurin:17
22
ARG JAR_FILE=build/libs/*.jar
33
COPY ${JAR_FILE} app.jar
44
ENTRYPOINT ["java","-jar","/app.jar"]

build.gradle

+5
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ repositories {
2828
dependencies {
2929
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
3030
implementation 'org.springframework.boot:spring-boot-starter-web'
31+
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
3132

3233
// Actuator
3334
implementation 'org.springframework.boot:spring-boot-starter-actuator'
@@ -77,6 +78,10 @@ dependencies {
7778
testAnnotationProcessor 'org.projectlombok:lombok'
7879
// FixtureMonkey
7980
testImplementation("com.navercorp.fixturemonkey:fixture-monkey-starter:1.0.20")
81+
82+
// FCM
83+
implementation 'com.google.firebase:firebase-admin:9.3.0'
84+
implementation 'com.fasterxml.jackson.core:jackson-core:2.16.1'
8085
}
8186

8287
tasks.named('test') {

docker-compose-test.yaml

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
version: "3.8"
2+
3+
services:
4+
redis:
5+
image: "redis:alpine"
6+
ports:
7+
- "6379:6379"
8+
environment:
9+
- TZ=Asia/Seoul

0 commit comments

Comments
 (0)