chore: CORS 설정 누락부분 수정 #109
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Repository의 Actions 탭에 나타날 Workflow 이름으로 필수 옵션은 아니다. | |
name: TripMingle CI/CD | |
# Workflow를 실행시키기 위한 Event 목록 | |
# dev 브랜치에 대한 변경 사항(push, pull_request)을 감지하면 해당 브랜치에 CI Workflow를 실행한다. | |
on: | |
push: | |
branches: [ dev ] | |
pull_request: | |
branches: [ dev ] | |
# Workflow가 레포지토리의 콘텐츠에 대해서 읽기 권한만 가지도록 한다. | |
# 즉, Workflow가 레포지토리의 콘텐츠를 실수로 변경하거나 삭제하는 것을 방지할 수 있다. | |
permissions: | |
contents: read | |
# 해당 Workflow의 하나 이상의 Job 목록 | |
jobs: | |
# Job 이름으로, build라는 이름으로 Job이 표시 | |
build: | |
# Runner가 실행되는 환경을 정의하는 부분 | |
runs-on: ubuntu-latest | |
# build Job 내의 step 목록 | |
steps: | |
# uses 키워드를 통해 Action을 불러올 수 있다. | |
# 해당 레포지토리를 check-out하여 레포지토리에 접근할 수 있는 Actions을 불러온다. (@v3은 버전) | |
- uses: actions/checkout@v3 | |
# 해당 서비스는 자바 스프링을 활용했기 때문에 jdk 17버전을 설정(설치) | |
- name: Set up JDK 17 | |
uses: actions/setup-java@v3 | |
with: | |
# Action에 전달할 매개변수 지정 | |
java-version: 17 | |
distribution: 'temurin' | |
cache: gradle # 빌드 속도를 높이기 위해 gradle 캐시 설정 (매번 gradle 종속성을 계속 설치할 순 없으니) | |
# gradlew 실행 권한 얻기 | |
- name: Grant execute permission for gradlew | |
run: chmod +x gradlew | |
# gradle build (-x test는 테스트를 생략하고 빌드하겠다는 명렁어 옵션) | |
- name: Build with Gradle | |
# github에서 제공하는 gradle 빌드 Action | |
uses: gradle/[email protected] | |
with: | |
arguments: clean build -x test | |
# 파일을 업로드하여 나중에 다운로드에 사용되도록 한다. | |
# Artifact를 통해 작업을 완료한 후 데이터를 보관하고 동일한 Workflow의 다른 작업에서 공유할 수 있다. | |
- name: Upload build artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: TripMingle | |
# 업로드할 파일의 경로를 지정 (build/libs에 TripMingle jar 파일을 업로드한다.) | |
# 빌드 단계에서 생성된 jar파일 | |
path: build/libs/TripMingle-0.0.1-SNAPSHOT.jar | |
deploy: | |
# needs 키워드는 현재 작업이 의존하는 이전 작업을 지정한다. | |
# 즉, build 작업이 성공적으로 완료된 후에만 이 작업이 실행된다. | |
needs: build | |
# Ubuntu 환경에서 실행 (Github Actions에서 제공하는 기본 실행 중 하나) | |
runs-on: ubuntu-latest | |
# Github 이벤트가 push일 때만 작업을 실행 | |
if: github.event_name == 'push' | |
steps: | |
# CI 단계에서 업로드한 artifact를 다운로드 한다. | |
# CI 단계에서 artifact를 업로드했으면 그냥 그거 쓰면 되는거 아닌가? | |
# -> CI에서 생성된 artifact를 CD단계에서 동일한 artifact를 사용하여 배포의 일관성을 유지 | |
# -> CI에서 생성된 결과물을 바로 사용하기때문에 시간 절약 | |
# -> CI에서 검증한 코드를 CD에서 사용하므로 배포 안정성 높일 수 있음 | |
- name: Download build artifact | |
uses: actions/download-artifact@v4 | |
with: | |
# TripMingle 이름으로 업로드된 artifact를 build/libs 경로에 다운로드 | |
name: TripMingle | |
path: build/libs/ | |
- name: Create .ssh directory and add EC2 host key | |
# run은 명령을 실행하는데 사용한다. | |
# ssh 연결 시 해당 호스트에 연결할 때 호스트키를 확인하고, 연결을 안전하게 유지할 수 있다. | |
run: | | |
mkdir -p ~/.ssh | |
ssh-keyscan -H ${{ secrets.EC2_HOST }} >> ~/.ssh/known_hosts | |
# ec2 접속을 위해 깃허브에서 설정한 ssh key (pem key)를 생성하고 권한을 부여 | |
- name: Create private key file | |
run: | | |
echo "${{ secrets.EC2_SSH_KEY }}" > private_key.pem | |
chmod 600 private_key.pem | |
# scp 명령을 통해 ec2에 jar 파일을 전송한다. | |
- name: Upload JAR to EC2 | |
run: | | |
scp -i private_key.pem build/libs/TripMingle-0.0.1-SNAPSHOT.jar ${{ secrets.EC2_USERNAME }}@${{ secrets.EC2_HOST }}:/home/${{ secrets.EC2_USERNAME }}/TripMingle.jar | |
# ec2에 이미 실행 중인 자바 프로세스를 강제종료한다. (-9는 강제종료, -15는 안전하게 종료) | |
# 프로젝트 내 application.yml에 들어갈 private 데이터에 대해서 .env의 환경 변수들을 읽어와 셀 환경에 설정한다. | |
# nohup java -jar 를 통해 백그라운드에서 java를 실행하도록 한다. 그리고 log 디렉토리에 app_log.out 파일로 로그를 저장한다. | |
- name: Deploy to EC2 | |
uses: appleboy/ssh-action@master | |
with: | |
host: ${{ secrets.EC2_HOST }} | |
username: ${{ secrets.EC2_USERNAME }} | |
key: ${{ secrets.EC2_SSH_KEY }} | |
script: | | |
pgrep java && pgrep java | xargs -r kill -9 | |
export $(grep -v '^#' /home/${{ secrets.EC2_USERNAME }}/tripmingle/.env | xargs) | |
nohup java -jar /home/${{ secrets.EC2_USERNAME }}/TripMingle.jar > /home/${{ secrets.EC2_USERNAME }}/log/app_log.out 2>&1 & | |
# ec2 접속을 위해 사용한 private key를 삭제해서 보안을 강화한다. | |
- name: Remove private key file | |
run: rm -f private_key.pem |