Skip to content

Commit

Permalink
[FEAT] 배포자동화 테스트 (#380)
Browse files Browse the repository at this point in the history
* [FIX] 작성자 여부 확인 코드 수정

* [FIX] Ordinal 범위 제한 수정 (#233)

* [FEAT] 로컬 spring에서 rds 연결 가능하도록 구현

* [CHORE] debug -> stg 로 변경

* [ADD] 처음 접속 여부 추가

* [FIX] 구인글 생성 로직 수정

* [DEL] 사용하지 않는 코드 삭제

* [DOCS] 구인글 관리 API 스웨거 (#244)

* [RENAME] SearchRecruitmentPostDto 이름 변경

* [ADD] 페이지네이션 용 Dto 추가

* [DOCS] 구인글 관리 스웨거

* [FEAT] 구인글 삭제 API 구현 (#246)

* [CHORE] DeleteStatus 패키지 위치 변경으로 인한 수정

* [ADD] DeleteStatus 추가

* [FEAT] 구인글 삭제 컨트롤러 로직 구현

* [CHORE] DeleteStatus 추가로 인한 변경

* [FEAT] 구인글 soft delete 구현

* [INFRA] AOP 활용한 로깅 시스템 구축 (#237)

* [FEAT] aop 기반 실행시간 로깅 구현

* [INFRA] 볼륨간의 마운트 추가

* [INFRA] RollingFileAppender 추가

* [INFRA] RollingFileAppender 추가

* [FEAT] aop 인터셉터 구현

* [FEAT] userId 반환 추가

* [FEAT] 최초 접근 기능 구현 (#248)

* [ADD] 최초접근 Dto에 추가

* [FEAT] 최초접근 API 컨트롤러 로직 구현

* [FEAT] 최초접근 서비스 로직 구현

* [FIX] 디폴트값 변경

* [FIX] 빌더에 course, professor 추가

* [FEAT] 구인글 관리 API 구현 (#249)

* [CHORE] API 페이지 관련 파라미터 추가

* [CHORE] Dto에 작성자 id, 마감여부 추가 및 ExpressionUtils 추가

* [ADD] 구인글 관리 repository 구현

* [ADD] 구인글 관리 Service, Controller 구현

* [CHORE] 작성자 Id 암호화 및 파일 url 변환

* [FIX] 포인트컷 수정 (#258)

* [DOCS] 내 포트폴리오 목록 API 스웨거 (#254)

* [RENAME] Dto 클래스명 변경

* [DOCS] 내 포트폴리오 목록 조회 API 스웨거 작성

* [RENAME] PaginationDto로 변경

* [ADD] Portfolio용 PaginationDto 추가

* [CHORE] 충돌 해결

* [FIX] Object 리턴하도록 수정 (#262)

* [CHORE] 구인글관리 - 내가작성한구인글 endpoint 매핑 변경 (#265)

* [FEAT] 내 포트폴리오 페이지네이션 조회 구현 (#263)

* [ADD] 페이지네이션 내 포트폴리오 조회 Repository 구현 및 메소드 명 변경

* [ADD] 페이지네이션 내 포트폴리오 조회 Service 구현 및 메소드 명 변경

* [ADD] 페이지네이션 내 포트폴리오 조회 Controller 구현

* [CHORE] 구인 글 조회시, 삭제된 구인글 제외조건 추가 (#266)

* [FIX] 여러 수정사항들 반영 (#267)

* [CHORE] 학교 이름 반환 추가

* [CHORE] 학교 이름 반환 추가 - 변수명 수정

* [CHORE] 학교 이름 반환 추가 - 로그인했을 때만 학교 반환하도록 수정

* [CHORE] 학교 이름 반환 추가 - 처음 로그인 했을 때, null 문제 해결

* [CHORE] 학교 인증 메일 전체적인 수정

* [CHORE] 학교 인증 메일 전체적인 수정 - 로고 시간 7일로 설정

* [CHORE] 신청자 승인 메일 전체적인 수정 - 로고 추가

* [CHORE] 신청자 승인 메일 전체적인 수정

* [CHORE] Skill 에러 해결

* [CHORE] 구인글 조회에서 토큰없는 경우 예외처리

* [CHORE] NoResourceFoundException 핸들링

* [FEAT] actuator 추가 및 배포자동화에 health check 추가

* [DEL] 기존 시간으로 복구

* [DEL] https 제거

* [INFRA] code deploy timeout 시간 변경 (#269)

* [FEAT] 포트폴리오 삭제 API 구현 (#270)

* [ADD] softDelete를 위한 필드 추가 및 인스턴스 메소드 추가

* [ADD] 포트폴리오 delete Service 구현

* [ADD] 포트폴리오 delete Controller 구현

* [CHORE] 빌더 어노테이션 제거 및 생성자 하나로 축소

* [CHORE] 생성자 변경에 따른 Fixture 수정 및 test-portfolio.sql 추가

* [ADD] Transactional 어노테이션 추가

* [ADD] 핀 포트폴리오 조회 시, 해당 유저의 포트폴리오 중에서 조회하도록 변경

* [FEAT] 구인글 자동 마감 스케줄링 (#271)

* [ADD] EnableScheduling 어노테이션 추가

* [ADD] 마감일 지난 구인글 마감여부 변경 Bulk Query 메소드 추가

* [ADD] 자동 마감일 확인 후 마감 여부 변경 스케줄링 서비스 추가

* [CHORE] 명시적 TimeZone 메소드 수정

* [CHORE] Spring TimeZone 설정 추가

* [CHORE] DockerContainer Timezone 설정 추가

* [FIX] DockerFile Timezone 설정 코드 순서 수정 (#275)

* [FIX] 시간대 설정을 위한 도커파일 수정 (#277)

* [FIX] dockerFile 타임존 설정 코드 순서 수정

* [FIX] tzdata 설정 제거 및 java 옵션 추가

* [FIX] tzdata 설정 제거 (#279)

* [FIX] 구인글 마감인 경우 제외하도록 수정 (#273)

* [CHORE] 신청 취소한 구인글 제외 처리 (#281)

* [FIX] 시간대 설정 옵션 제거 (#283)

* [FIX] 시간대 설정 옵션 복원 (#285)

* [�REFACTOR] 메일 비동기 전송 구현 (#276)

* [FEAT] 메일 비동기 전송 구현

* [REFACTOR] 승인 수 만큼 스레드 생성하도록 변경

* [CHORE] 메서드명 변경

* [CHORE] Server import 추가 및 local 도메인 제거 (#286)

* [CHORE] 디스코드 알림 봇 수정 (#288)

* [CHORE] cors 수정 (#291)

* [FIX] cd 수정 (#293)

* [FIX] cors 수정 (#296)

* [FIX] 파일 확장자 제거 로직 추가 (#298)

* [ADD] jpeg 추가 (#300)

* [CHORE] 구인역할 스킬없는 경우 대응 (#302)

* [CHORE] 이메일 인증 후 중복회원 가입 방지 추가 (#304)

* [CHORE] 이메일 인증 후 중복회원 가입 방지 추가

* [CHORE] readOnly 추가

* [CHORE] 프로필 관련 API 수정 (#306)

* [CHORE] 프로필 수정 API 파일 확장자 validation 추가

* [CHORE] 프로필 조회 API 이미지 파일명 response 추가

* [CHORE] 프로필 수정 API 수상활동 validation

* [CHORE] 작성자 여부 판단을 위한 User 추가

* [ADD] 공개여부에 따른 유저정보 조회 메서드 추가

* [ADD] 작성자 여부에 따른 유저 정보 조회 Service 함수 추가

* [CHORE] 메퍼 수정 및 오픈 프로필 조회하도록 readProfile 메소드 수정

* [CHORE] fixture 생성자 수정

* [CHORE] 구현 코드 수정에 따른 테스트 코드 및 Fixture 수정

* [CHORE] QA 내용 반영 (#309)

* [CHORE] 대학, 학과 길이 제한 변경

* [CHORE] 대학 도메인 길이 변경

* [FIX] 이미 존재하는 이메일인지 검증 로직 추가

* [CHORE] 로깅 출력 방식 변경

* [CHORE] 제약조건 추가

* [CHORE] 최대 길이 수정

* [FIX] 포트폴리오 이미지 Path 수정 (#314)

* [FIX] 함수명 변경 및 포트폴리오 이미지 및 파일 업로드 Path 변경

* [FIX] 포트폴리오 이미지 및 파일 getUrl Path 변경

* [FEAT] XSS 공격 대비 방어 코드 작성 (#310)

* [FEAT] XSS 방지 문자 추가

* [FEAT] XSS 방지 컨버터 구현

* [TEST] XSS 공격에 대한 방어 테스트

* [CHORE] 구인글 상세 내용에는 XSS 필터 적용 제외 구현

* [CHORE] 메서드명 변경

* [FIX] xss 필터 수정 (#316)

* [REFACTOR] 토큰 클레임 플랫폼 종속 개선 (#312)

* [CHORE] 파라미터 위치 변경 및 변수명 변경

* [CHORE] 플랫폼 id -> userId로 변경

* [CHORE] 토큰 클레임 userId로 변경

* [CHORE] 토큰 userId로 조회하기 위한 변경

* [FEAT] 구인 신청시 메일 발송 구현 (#319)

* [INFRA] 신청 알림 메일 템플릿 추가

* [FEAT] Main 메일 추출 메서드 구현

* [FEAT] 신청 알림 메일 서비스 구현

* [FEAT] 신청 API에 신청 알림 메일 메서드 추가

* [FIX] 구인글 관리 북마크 여부 해결 및 관련 코드 리펙토링 (#320)

* [ADD] 구인글 관리 Enum 추가

* [CHORE] 검색 Repository query 반환 제거

* [FIX] Util 메소드 추가 및 구인글관리 Repository 재구현
- 함수를 하나로 압축
- 북마크 여부 오류 해결

* [CHORE] 구인글관리 Service 메소드 변경

* [FIX] QA 수정사항 적용 (#321)

* [ADD] 포트폴리오 작성자 닉네임 스펙 추가 (#325)

* [CHORE] 구인글 작성자 검증 로직 추가 (#324)

* [FEAT] 신청자 목록 조회 API 구인글 작성자 검증 로직 추가

* [FEAT] 신청자 정보 조회 API 구인글 작성자 검증 로직 추가

* [ADD] 구인글 작성자 검증 로직을 위한 매개변수 수정

* [FEAT] 구인글 수정 API 작성자 검증 로직 추가

* [FIX] cd 수정 (#329)

* [FIX] URL regex 수정 (#327)

* [CHORE] 유효시간 변경 (#333)

* [FIX] 포트폴리오 삭제로직 수정 (#331)

* [FIX] Http Status 변경

* [FIX] 삭제 여부에 따라 조회하도록 Repository 수정

* [FIX] 핀 포트폴리오의 경우 삭제에 대한 예외처리 추가

* [ADD] 작성자 여부 검증 로직 Domain 내에 추가

* [CHORE] 작성자 검증 로직 제거 및 검증 메소드 호출

* [CHORE] 키워드 검색 방식 변경 (#336)

* [CHORE] 로그아웃 및 토큰 재발행 로직 수정 (#339)

* [CHORE] 플랫폼 id -> userId로 변경

* [CHORE] 플랫폼 id -> userId로 변경

* [FIX] content에 한해 이스케이핑 적용 해제 (#343)

* [FIX] 로그인 여부, 범위에 따라 학교 구분 (#344)

* [FIX] 구인글 검색 API total count 버그 수정 (#346)

* [CHORE] 이스케이프 적용 해제 (#351)

* [FEAT] 내 프로필 이미지 조회 기능 구현 (#347)

* [FEAT] 내 프로필 이미지 조회 기능 구현

* [CHORE] url 변경

* [FEAT] 회원 탈퇴 구현 (#352)

* [ADD] 삭제 메서드 추가

* [ADD] findAll 메서드 추가

* [ADD] 회원탈퇴 스웨거 추가

* [FEAT] 회원탈퇴 컨트롤러 구현

* [FEAT] 회원 관리 서비스 로직 추가 및 회원탈퇴 기능 구현

* [FIX] bookmark, award 위치 수정

* [FIX] 삭제 쿼리 N+1 -> 각각 1번으로 수정

* [CHORE] clearAutomatically 옵션 추가

* [REFACTOR] 일급컬렉션 사용 및 테스트 코드 전반 수정 (#355)

* [FIX] 테스트 코드 수정(토큰 변경, 빠진 로직 추가)

* [REFACTOR] List 객체 일급컬렉션 사용

* [FIX] 삭제하려는 구인글 북마크 이력 삭제 추가 (#357)

* [FIX] 삭제하려는 유저의 신청 이력 삭제 추가 (#358)

* [FIX] 학점 정보 변경 (#360)

* [ADD] 미리보기용 오리진 추가 (#362)

* [CHORE] 상관없음 -> 온/오프라인 변경 (#364)

* [FEAT] CloudFront를 이용한 이미지 캐싱 및  SignedUrl 적용 (#353)

* [INFRA] 스크립트 경로 수정 (#367)

* [FIX] Cloudfront PrivateKey 이슈 해결  (#370)

* [FEAT] 운영 개발 서버 분리 및 배포자동화 업데이트 (#372)

* [CHORE] gitignore 수정

* [ADD] github action dev & prod 용 추가

* [DEL] 기존 deploy github action 제거

* [CHORE] build github action 실행 포인트 변경

* [ADD] 개발용 도커파일 및 도커 컴포즈 추가

* [ADD] 개발용 도커파일 및 도커 컴포즈 추가 및 기존 파일 제거

* [CHORE] 배포 경로 수정

* [CHORE] code deploy 배포 스크립트 수정

* [CHORE] 깃헙 액션에서 yml 파일명 수정

* [CHORE] 깃헙 액션 job 이름 변경

* [CHORE] 깃헙 액션 시크릿 변수 변경

* Revert "[FEAT] 운영 개발 서버 분리 및 배포자동화 업데이트 (#372)" (#373)

This reverts commit bafaab4.

* [FEAT] 운영/개발서버 분리 및 배포자동화 업데이트 (#379)

* [CHORE] gitignore 수정

* [ADD] github action dev & prod 용 추가[ADD] github action dev & prod 용 추가

* [DEL] 기존 deploy github action 제거

* [CHORE] build github action 실행 포인트 변경

* [ADD] 개발/운용용 도커파일 및 도커 컴포즈 추가

* [CHORE] code deploy 배포 스크립트 수정

* [CHORE] 압축 파일 경로 수정 및 키 파일 추가

* [CHORE] 배포 그룹 출력 추가

* [CHORE] -j 옵션 제거

* [CHORE] 오타 수정

* [CHORE] 파일 존재시 덮어쓰기 추가

* [CHORE] private 키 오타 수정

---------

Co-authored-by: mikekks <thdalsrb79@naver.com>
Co-authored-by: Mingyu Song <100754581+mikekks@users.noreply.github.com>
  • Loading branch information
3 people authored Jul 31, 2024
1 parent f624d08 commit 67c31d0
Show file tree
Hide file tree
Showing 157 changed files with 2,827 additions and 827 deletions.
21 changes: 14 additions & 7 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,16 @@ name: BackEnd - CI/CD(build)

on:
pull_request:
branches: [ "main","develop" ]
branches: [ "develop", "release/v**", "main" ]
push:
branches: [ "develop" ]
branches: [ "develop", "release/v**" ]

permissions:
contents: read

jobs:
build:

runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3
# JDK를 17 버전으로 셋팅한다.
Expand All @@ -42,7 +40,7 @@ jobs:
${{ runner.os }}-gradle-
# 프로젝트 저장소에 업로드하면 안되는 설정 파일들을 만들어줍니다.
- name: Make application.yml
- name: Make application.yml & Keys
run: |
# src/main/resources 경로를 이동
cd ./src/main/resources
Expand All @@ -51,8 +49,15 @@ jobs:
touch ./application-dev.yml
# 등록해둔 Github Secrets의 내용을 이용해서 yml 파일의 내용을 써줍니다.
echo "$APPLICATION_DEV" > ./application-dev.yml
# key 폴더 만들고 cloudfront 키 넣기
mkdir key
cd key
touch ./private_key.pem
echo "$CLOUDFRONT_KEY" > ./private_key.pem
env:
APPLICATION_DEV: ${{ secrets.APPLICATION_DEV }}
CLOUDFRONT_KEY: ${{ secrets.CLOUD_FRONT_KEY }}
shell: bash

- name: Gradle 권한 부여
Expand All @@ -63,6 +68,8 @@ jobs:

- name: Discord 알림 봇
uses: sarisia/actions-status-discord@v1
if: always()
if: ${{ failure() }}
with:
webhook: ${{ secrets.DISCORD_WEBHOOK }}
title: ❗️ Backend CI failed ❗️
webhook: ${{ secrets.DISCORD_WEBHOOK }}
color: FFFF00
90 changes: 56 additions & 34 deletions .github/workflows/deploy.yml → .github/workflows/deploy-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,28 +9,33 @@ name: BackEnd - CI/CD(deploy)

on:
pull_request:
types: [ closed ]
branches: [ "develop" ]
types: [ closed ]


permissions:
contents: read

jobs:
deploy:
deploy-dev:
if: github.event.pull_request.merged == true
runs-on: ubuntu-latest

environment: develop
env:
DEPLOYMENT_GROUP_NAME: meeteam-dev
S3_BUCKET_DIR_NAME: dev
steps:
- uses: actions/checkout@v3
- name: ✅ Checkout branch
uses: actions/checkout@v3
# JDK를 17 버전으로 셋팅한다.
- name: Set up JDK 17
- name: ⚙️ Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'

# Gradle을 캐싱한다 -> 빌드 속도가 증가하는 효과가 있다.
- name: Gradle 캐싱
- name: Gradle 캐싱
uses: actions/cache@v3
with:
path: |
Expand All @@ -41,69 +46,86 @@ jobs:
${{ runner.os }}-gradle-
# 프로젝트 저장소에 업로드하면 안되는 설정 파일들을 만들어줍니다.
- name: Make application.yml & ApproveMail.html
- name: 🗂️ Make config
run: |
# src/main/resources 경로 이동
cd ./src/main/resources
cd ./src/main/resources
# yml 파일 생성
touch ./application-dev.yml
echo "$APPLICATION_DEV" > ./application-dev.yml
touch ./application-dev.yml
echo "$APPLICATION_DEV" > ./application-dev.yml
# 메일 관련된 html 파일 생성
# 키 파일 생성
touch ./private-key.pem
echo "$CLOUD_FRONT_KEY" > ./private-key.pem
# 폴더 생성
mkdir templates
# 메일 관련된 html 파일 생성
cd ./templates
touch ./ApproveMail.html
echo "$MAIL_APPROVE_TEMPLATE" > ./ApproveMail.html
touch ./UniversityAuthMail.html
echo "$MAIL_VERIFY_TEMPLATE" > ./UniversityAuthMail.html
touch ./ApplicationNotificationMail.html
echo "$MAIL_APPLICATION_NOTIFICATION_TEMPLATE" > ./ApplicationNotificationMail.html
env:
APPLICATION_DEV: ${{ secrets.APPLICATION_DEV }}
MAIL_APPROVE_TEMPLATE: ${{ secrets.MAIL_APPROVE_TEMPLATE }}
MAIL_VERIFY_TEMPLATE: ${{ secrets.MAIL_VERIFY_TEMPLATE }}
MAIL_APPLICATION_NOTIFICATION_TEMPLATE: ${{ secrets.MAIL_APPLICATION_NOTIFICATION_TEMPLATE }}
CLOUD_FRONT_KEY: ${{ secrets.CLOUD_FRONT_KEY }}
shell: bash

- name: Gradle 권한 부여
- name: ⚙️ Gradle 권한 부여
run: chmod +x gradlew

- name: Gradle로 빌드 실행
- name: ⚙️ Gradle로 빌드 실행
run: ./gradlew bootjar


# 배포에 필요한 여러 설정 파일과 프로젝트 빌드파일을 zip 파일로 모아줍니다.
- name: zip file 생성
# 배포에 필요한 여러 설정 파일과 프로젝트 빌드파일을 zip 파일로 모아준다.
- name: 📦 zip file 생성
run: |
mkdir deploy
cp ./docker/docker-compose.blue.yml ./deploy/
cp ./docker/docker-compose.green.yml ./deploy/
mkdir deploy/dev
cp ./docker/dev/docker-compose.dev.yml ./deploy/dev
cp ./docker/dev/Dockerfile ./deploy/dev
cp ./src/main/resources/private-key.pem ./deploy/dev
cp ./build/libs/*.jar ./deploy/dev
cp ./appspec.yml ./deploy/
cp ./docker/Dockerfile ./deploy/
cp ./scripts/*.sh ./deploy/
cp ./build/libs/*.jar ./deploy/
zip -r -qq -j ./spring-build.zip ./deploy
cp ./scripts/deploy.sh ./deploy/
zip -r -qq ./spring-app.zip ./deploy

# AWS에 연결해줍니다.
- name: AWS 연결
# AWS에 연결해준다.
- name: 🌎 AWS 연결
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.AWS_REGION }}

# S3에 프로젝트를 업로드 합니다.
- name: S3에 프로젝트 업로드
# S3에 프로젝트를 업로드 한다.
- name: 🚛 S3에 프로젝트 업로드
run: |
aws s3 cp \
--region ap-northeast-2 \
./spring-build.zip s3://meeteam-backend-bucket
./spring-app.zip s3://${{ secrets.S3_BUCKET_NAME }}/${{ env.S3_BUCKET_DIR_NAME }}/spring-app.zip
# CodeDelploy에 배포를 요청합니다.
- name: Code Deploy 배포 요청
# CodeDelploy에 배포를 요청한다.
- name: 🚀 Code Deploy 배포 요청
run: aws deploy create-deployment --application-name meeteam-app
--deployment-config-name CodeDeployDefault.OneAtATime
--deployment-group-name meeteam-app
--s3-location bucket=meeteam-backend-bucket,bundleType=zip,key=spring-build.zip
--deployment-group-name ${{ env.DEPLOYMENT_GROUP_NAME }}
--s3-location bucket=${{ secrets.S3_BUCKET_NAME }},bundleType=zip,key=${{ env.S3_BUCKET_DIR_NAME }}/spring-app.zip

- name: Discord 알림 봇
uses: sarisia/actions-status-discord@v1
if: always()
if: ${{ failure() }}
with:
webhook: ${{ secrets.DISCORD_WEBHOOK }}
title: ❗️ Backend CD failed ❗️
webhook: ${{ secrets.DISCORD_WEBHOOK }}
color: FF0000
131 changes: 131 additions & 0 deletions .github/workflows/deploy-prod.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle

name: BackEnd - CI/CD(deploy)

on:
pull_request:
branches: [ "main" ]
types: [ closed ]


permissions:
contents: read

jobs:
deploy-prod:
if: github.event.pull_request.merged == true
runs-on: ubuntu-latest
environment: production
env:
DEPLOYMENT_GROUP_NAME: meeteam-app
S3_BUCKET_DIR_NAME: prod
steps:
- name: ✅ Checkout branch
uses: actions/checkout@v3
# JDK를 17 버전으로 셋팅한다.
- name: ⚙️ Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'

# Gradle을 캐싱한다 -> 빌드 속도가 증가하는 효과가 있다.
- name: ✅ Gradle 캐싱
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
# 프로젝트 저장소에 업로드하면 안되는 설정 파일들을 만들어줍니다.
- name: 🗂️ Make config
run: |
# src/main/resources 경로 이동
cd ./src/main/resources
# yml 파일 생성
touch ./application-prod.yml
echo "$APPLICATION_PROD" > ./application-prod.yml
# 키 파일 생성
touch ./private-key.pem
echo "$CLOUD_FRONT_KEY" > ./private-key.pem
# 폴더 생성
mkdir templates
# 메일 관련된 html 파일 생성
cd ./templates
touch ./ApproveMail.html
echo "$MAIL_APPROVE_TEMPLATE" > ./ApproveMail.html
touch ./UniversityAuthMail.html
echo "$MAIL_VERIFY_TEMPLATE" > ./UniversityAuthMail.html
touch ./ApplicationNotificationMail.html
echo "$MAIL_APPLICATION_NOTIFICATION_TEMPLATE" > ./ApplicationNotificationMail.html
env:
APPLICATION_PROD: ${{ secrets.APPLICATION_PROD }}
MAIL_APPROVE_TEMPLATE: ${{ secrets.MAIL_APPROVE_TEMPLATE }}
MAIL_VERIFY_TEMPLATE: ${{ secrets.MAIL_VERIFY_TEMPLATE }}
MAIL_APPLICATION_NOTIFICATION_TEMPLATE: ${{ secrets.MAIL_APPLICATION_NOTIFICATION_TEMPLATE }}
CLOUD_FRONT_KEY: ${{ secrets.CLOUD_FRONT_KEY }}
shell: bash

- name: ⚙️ Gradle 권한 부여
run: chmod +x gradlew

- name: ⚙️ Gradle로 빌드 실행
run: ./gradlew bootjar
# 배포에 필요한 여러 설정 파일과 프로젝트 빌드파일을 zip 파일로 모아준다.
- name: 📦 zip file 생성
run: |
mkdir deploy
mkdir deploy/prod
cp ./docker/prod/docker-compose.prod.yml ./deploy/prod
cp ./docker/prod/Dockerfile ./deploy/prod
cp ./src/main/resources/private-key.pem ./deploy/prod
cp ./build/libs/*.jar ./deploy/prod
cp ./scripts/deploy.sh ./deploy/
cp ./appspec.yml ./deploy/
zip -r -qq ./spring-app.zip ./deploy

# AWS에 연결해준다.
- name: 🌎 AWS 연결
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.AWS_REGION }}

# S3에 프로젝트를 업로드 한다.
- name: 🚛 S3에 프로젝트 업로드
run: |
aws s3 cp \
--region ap-northeast-2 \
./spring-app.zip s3://${{ secrets.S3_BUCKET_NAME }}/${{ env.S3_BUCKET_DIR_NAME }}/spring-app.zip
# CodeDelploy에 배포를 요청한다.
- name: 🚀 Code Deploy 배포 요청
run: aws deploy create-deployment --application-name meeteam-app
--deployment-config-name CodeDeployDefault.OneAtATime
--deployment-group-name ${{ env.DEPLOYMENT_GROUP_NAME }}
--s3-location bucket=${{ secrets.S3_BUCKET_NAME }},bundleType=zip,key=${{ env.S3_BUCKET_DIR_NAME }}/spring-app.zip

- name: Discord 알림 봇
uses: sarisia/actions-status-discord@v1
if: ${{ failure() }}
with:
title: ❗️ Backend CD failed ❗️
webhook: ${{ secrets.DISCORD_WEBHOOK }}
color: FF0000
6 changes: 4 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -177,8 +177,10 @@ replay_pid*

# End of https://www.toptal.com/developers/gitignore/api/intellij,java

*.yml
src/**/*.yml
*.sql
*.html
src/main/generated
.gradle
.gradle

key
3 changes: 2 additions & 1 deletion appspec.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ files:
destination: /home/ubuntu/app
# 대상 경로에 이미 파일이 존재하는 경우, 덮어쓰기를 허용할지 여부
overwrite: yes
file_exists_behavior: OVERWRITE

# 파일 및 디렉토리 권한에 관련된 설정
permissions:
Expand All @@ -30,6 +31,6 @@ hooks:
# 실행할 스크립트 또는 명령의 위치
- location: deploy.sh
# 스크립트 또는 명령 실행의 제한 시간을 설정
timeout: 60
timeout: 180
# CodeDeploy 중 실행되는 스크립트 또는 명령을 실행할 사용자를 지정
runas: ubuntu
Loading

0 comments on commit 67c31d0

Please sign in to comment.