Skip to content

Commit

Permalink
v0.0.2 (#110)
Browse files Browse the repository at this point in the history
* 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)

* fix: test docker compose 수정

---------

Co-authored-by: Park Yun Chan <dbscks9793@gmail.com>
Co-authored-by: kwanok noh <61671343+kwanok@users.noreply.github.com>
  • Loading branch information
3 people authored Aug 11, 2024
1 parent 1b002aa commit fbe2e93
Show file tree
Hide file tree
Showing 73 changed files with 2,145 additions and 207 deletions.
116 changes: 73 additions & 43 deletions .github/workflows/develop-build-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
strategy:
matrix:
java-version: [ 17 ]
distribution: [ 'zulu' ]
distribution: [ 'temurin' ]
steps:
- name: Checkout code
uses: actions/checkout@v3
Expand All @@ -26,6 +26,10 @@ jobs:
java-version: ${{ matrix.java-version }}
distribution: ${{ matrix.distribution }}

# test 활용 목적의 container 실행
- name: Start test docker container
run: docker compose -f ./docker-compose-test.yaml up -d

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

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

# Docker 이미지 빌드 및 도커 허브 푸시
- name: Docker build & push
run: |
docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_TOKEN }}
docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_IMAGE_NAME }} .
docker push ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_IMAGE_NAME }}
# Dockerhub 로그인
- name: Login to Dockerhub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

# Docker 메타데이터 추출
- name: Extract Docker metadata
id: metadata
uses: docker/metadata-action@v5.5.0
env:
DOCKERHUB_IMAGE_FULL_NAME: ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_IMAGE_NAME }}
with:
images: ${{ env.DOCKERHUB_IMAGE_FULL_NAME }}
tags: |
type=sha,prefix=
- name: Current Time
uses: gerred/current-time@v1.0.0
id: current-time
# Docker 이미지 빌드 및 도커허브로 푸시
- name: Docker Build and Push
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: ${{ steps.metadata.outputs.tags }}

- name: Replace string
uses: frabert/replace-string-action@v2.1
id: format-time
# 서버로 docker-compose 파일 전송
- name: Copy docker-compose file to EC2
uses: burnett01/rsync-deployments@7.0.1
with:
pattern: '[:\.]+'
string: "${{ steps.current-time.outputs.time }}"
replace-with: '-'
flags: 'g'
switches: -avzr --delete
remote_host: ${{ secrets.EC2_HOST }}
remote_user: ${{ secrets.EC2_USERNAME }}
remote_key: ${{ secrets.EC2_PRIVATE_KEY }}
path: docker-compose.yaml
remote_path: /home/ec2-user/

- name: Prepare deployment package
run: |
zip -r deployment-package.zip docker-compose.yaml nginx/default.conf
- name: Copy default.conf to EC2
uses: burnett01/rsync-deployments@7.0.1
with:
switches: -avzr --delete
remote_host: ${{ secrets.EC2_HOST }}
remote_user: ${{ secrets.EC2_USERNAME }}
remote_key: ${{ secrets.EC2_PRIVATE_KEY }}
path: ./nginx
remote_path: /home/ec2-user/

- name: Beanstalk Deploy
uses: einaregilsson/beanstalk-deploy@v22
# EC2로 배포
- name: Deploy to EC2 Server
uses: appleboy/ssh-action@v1.0.3
env:
IMAGE_FULL_URL: ${{ steps.metadata.outputs.tags }}
DOCKERHUB_IMAGE_NAME: ${{ env.DOCKERHUB_IMAGE_NAME }}
with:
aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
existing_bucket_name: "walwal-server-dev-deployment"
application_name: "walwal-dev"
environment_name: "Walwal-dev-env"
version_label: "walwal-dev-${{ steps.format-time.outputs.replaced }}"
region: ap-northeast-2
deployment_package: deployment-package.zip
wait_for_environment_recovery: 180
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_PRIVATE_KEY }}
envs: IMAGE_FULL_URL, DOCKERHUB_IMAGE_NAME # docker-compose.yml 에서 사용할 환경 변수
debug: true
script: |
echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login -u "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
docker compose up -d
docker exec -d nginx nginx -s reload
docker image prune -a -f
# Slack 알림
- name: Send Deploy Result to Slack
uses: rtCamp/action-slack-notify@v2
## Slack
- name: Slack Alarm
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
author_name: GitHub-Actions CI/CD
fields: repo,message,commit,author,ref,job,took
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
SLACK_USERNAME: 왈왈봇
SLACK_COLOR: ${{ job.status == 'success' && 'good' || 'danger' }}
SLACK_TITLE: "Deploy Summary - Develop"
SLACK_MESSAGE: |
- image tag: `${{ steps.metadata.outputs.tags }}`
- build scan report: ${{ steps.gradle.outputs.build-scan-url }}
- deploy status: ${{ job.status }}
- deploy time: ${{ steps.current-time.outputs.time }}
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} # required
if: always() # Pick up events even if the job fails or is canceled.

6 changes: 5 additions & 1 deletion .github/workflows/develop-pull-request-on-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@ jobs:
uses: actions/setup-java@v3
with:
java-version: ${{ matrix.java-version }}
distribution: 'zulu'
distribution: 'adopt'

# test 활용 목적의 container 실행
- name: Start test docker container
run: docker compose -f ./docker-compose-test.yaml up -d

- name: Grant execute permission for gradlew
run: chmod +x ./gradlew
Expand Down
126 changes: 73 additions & 53 deletions .github/workflows/production-build-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,12 @@ on:
tags:
- v*.*.*

permissions:
id-token: write
contents: read

env:
DOCKERHUB_IMAGE_NAME: walwal-server
DOCKERHUB_IMAGE_FULL_NAME: ${{ secrets.DOCKERHUB_USERNAME }}/walwal-server

jobs:
build-deploy:
Expand All @@ -17,15 +20,19 @@ jobs:
matrix:
java-version: [ 17 ]
distribution: [ 'temurin' ]

steps:
# 기본 체크아웃
# 체크아웃
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4

# JDK를 17 버전으로 세팅
# Docker 이미지 태그 세팅
- name: Set up image-tag by GITHUB_SHA
id: image-tag
run: echo "value=$(cut -d'v' -f2 <<< ${GITHUB_REF#refs/*/})" >> $GITHUB_OUTPUT

# JDK 17 버전으로 세팅
- name: Set up JDK 17
uses: actions/setup-java@v3
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java-version }}
distribution: ${{ matrix.distribution }}
Expand All @@ -34,15 +41,24 @@ jobs:
- name: Run chmod to make gradlew executable
run: chmod +x ./gradlew

# Redis 컨테이너 실행
- name: Start containers
run: docker compose -f ./docker-compose-test.yaml up -d

# Gradle 빌드
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3
with:
cache-read-only: ${{ github.ref != 'refs/heads/main' && github.ref != 'refs/heads/develop' }} # feature 브랜치는 캐시를 읽기 전용으로 설정
cache-encryption-key: ${{ secrets.GRADLE_CACHE_ENCRYPTION_KEY }}
add-job-summary-as-pr-comment: always
build-scan-publish: true
build-scan-terms-of-use-url: "https://gradle.com/help/legal-terms-of-use"
build-scan-terms-of-use-agree: "yes"

- name: Build with Gradle
id: gradle
uses: gradle/gradle-build-action@v2
with:
arguments: |
build
--scan
cache-read-only: ${{ github.ref != 'refs/heads/main' && github.ref != 'refs/heads/develop' }}
run: ./gradlew build --configuration-cache

# Dockerhub 로그인
- name: Login to Dockerhub
Expand All @@ -55,6 +71,8 @@ jobs:
- name: Extract Docker metadata
id: metadata
uses: docker/metadata-action@v5.5.0
env:
DOCKERHUB_IMAGE_FULL_NAME: ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_IMAGE_NAME }}
with:
images: ${{ env.DOCKERHUB_IMAGE_FULL_NAME }}
tags: |
Expand All @@ -70,55 +88,57 @@ jobs:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

# Docker 이미지 빌드 및 도커허브로 푸시
# 이미지 빌드 및 Dockerhub에 푸시
- name: Docker Build and Push
uses: docker/build-push-action@v5
with:
context: .
platforms: linux/arm64/v8
platforms: linux/arm64
push: true
tags: ${{ steps.metadata.outputs.tags }}

- name: Current Time
uses: gerred/current-time@v1.0.0
id: current-time
tags: ${{ secrets.DOCKERHUB_USERNAME }}/walwal-server:${{ steps.image-tag.outputs.value }}

- name: Replace string
uses: frabert/replace-string-action@v2.1
id: format-time
# AWS 로그인
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
pattern: '[:\.]+'
string: "${{ steps.current-time.outputs.time }}"
replace-with: '-'
flags: 'g'
role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }}
aws-region: ap-northeast-2
output-config: true

# 복사 경로 환경변수 설정
- name: Set up S3 copy path
env:
S3_DEPLOY_BUCKET_NAME: ${{ secrets.S3_DEPLOY_BUCKET_NAME }}
run: echo "S3_COPY_PATH=$(echo s3://${S3_DEPLOY_BUCKET_NAME}/walwal-prod/docker-compose.yaml)" >> $GITHUB_ENV

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

- name: Beanstalk Deploy
uses: einaregilsson/beanstalk-deploy@v22
- name: Deploy to EC2 Server
uses: appleboy/ssh-action@master
env:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
IMAGE_FULL_URL: ${{ steps.metadata.outputs.tags }}
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_PRIVATE_KEY }}
envs: IMAGE_FULL_URL # docker-compose.yaml 에서 사용할 환경 변수
script: |
aws s3 cp ${{ env.S3_COPY_PATH }} docker-compose.yaml
echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login -u "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
docker pull ${{ env.IMAGE_FULL_URL }}
docker compose up -d
docker image prune -a -f
## Slack
- name: Slack Alarm
uses: 8398a7/action-slack@v3
with:
aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
existing_bucket_name: "walwal-server-prod-deployment"
application_name: "walwal-prod"
environment_name: "Walwal-prod-env"
version_label: "walwal-prod-${{ steps.format-time.outputs.replaced }}"
region: ap-northeast-2
deployment_package: deployment-package.zip
wait_for_environment_recovery: 180

# Slack 알림
- name: Send Deploy Result to Slack
uses: rtCamp/action-slack-notify@v2
status: ${{ job.status }}
author_name: GitHub-Actions CI/CD
fields: repo,message,commit,author,ref,job,took
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
SLACK_USERNAME: 왈왈봇
SLACK_COLOR: ${{ job.status == 'success' && 'good' || 'danger' }}
SLACK_TITLE: "Deploy Summary - Production"
SLACK_MESSAGE: |
- image tag: `${{ steps.metadata.outputs.tags }}`
- build scan report: ${{ steps.gradle.outputs.build-scan-url }}
- deploy status: ${{ job.status }}
- deploy time: ${{ steps.current-time.outputs.time }}
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} # required
if: always() # Pick up events even if the job fails or is canceled.
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM azul/zulu-openjdk:17-latest
FROM eclipse-temurin:17
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
5 changes: 5 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ repositories {
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'

// Actuator
implementation 'org.springframework.boot:spring-boot-starter-actuator'
Expand Down Expand Up @@ -77,6 +78,10 @@ dependencies {
testAnnotationProcessor 'org.projectlombok:lombok'
// FixtureMonkey
testImplementation("com.navercorp.fixturemonkey:fixture-monkey-starter:1.0.20")

// FCM
implementation 'com.google.firebase:firebase-admin:9.3.0'
implementation 'com.fasterxml.jackson.core:jackson-core:2.16.1'
}

tasks.named('test') {
Expand Down
9 changes: 9 additions & 0 deletions docker-compose-test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
version: "3.8"

services:
redis:
image: "redis:alpine"
ports:
- "6379:6379"
environment:
- TZ=Asia/Seoul
Loading

0 comments on commit fbe2e93

Please sign in to comment.