Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 37 additions & 24 deletions .github/workflows/dev_deploy.yml
Original file line number Diff line number Diff line change
@@ -1,66 +1,79 @@
name: UMC Dev CI/CD

on:
pull_request:
branches: [ develop ] # develop 브랜치에 pr이 일어날 때 실행
types: [closed] # 해당 pr이 닫혔을 때만 실행되도록 설정
workflow_dispatch: # (2).수동 실행도 가능하도록
branches: [ develop ]
types: [closed]
workflow_dispatch:

jobs:
build:
runs-on: ubuntu-latest # (3).OS환경
if: github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'develop' # 닫힌 pr이 성공적으로 합쳐졌을 때, 그리고 base ref가 develop일 때만 되도록 설정
runs-on: ubuntu-latest
if: github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'develop'

steps:
- uses: actions/checkout@v3 # 저장소 코드 체크아웃
- name: Set up JDK 21 # Java 개발 킷 설정
uses: actions/setup-java@v3
# [중요] 코드를 체크아웃해야 빌드를 할 수 있습니다. (v4로 업데이트)
- name: Checkout Source Code
uses: actions/checkout@v4
- name: Set up JDK 21
uses: actions/setup-java@v4 # v4로 업데이트 권장
with:
distribution: 'temurin'
java-version: '21'

- name: Make application-dev.yml # application-dev.yml 파일 생성
- name: Make application-dev.yml
run: |
cd ./src/main/resources
echo "${{ secrets.APPLICATION_DEV_YML }}" > ./application-dev.yml
shell: bash

- name: Grant execute permission for gradlew # gradlew 실행 권한 부여
- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Build with Gradle # Gradle을 사용하여 프로젝트 빌드
uses: gradle/gradle-build-action@v2
# Gradle 빌드 액션도 최신 버전으로 변경 권장
- name: Build with Gradle
uses: gradle/gradle-build-action@v3
with:
arguments: build
arguments: build -x test # 테스트 코드가 없다면 -x test로 스킵하여 속도 향상

- name: Upload build artifact # 빌드된 아티팩트 업로드
uses: actions/upload-artifact@v3
# [에러 해결] v3 -> v4로 변경
- name: Upload build artifact
uses: actions/upload-artifact@v4
with:
name: umc9thServer
path: build/libs/*.jar

deploy:
needs: build # build 작업이 성공적으로 완료된 후 실행
needs: build
runs-on: ubuntu-latest

steps:
- name: Download build artifact # 이전 단계에서 업로드한 아티팩트 다운로드
uses: actions/download-artifact@v3
# [에러 해결] v3 -> v4로 변경
- name: Download build artifact
uses: actions/download-artifact@v4
with:
name: umc9thServer
path: build/libs/

- name: Deploy to EC2 # EC2에 배포
- name: Deploy to EC2
env:
EC2_SSH_KEY: ${{ secrets.EC2_SSH_KEY }}
EC2_USERNAME: ${{ secrets.EC2_USERNAME }}
EC2_HOST: ${{ secrets.EC2_HOST }}
run: |
echo "$EC2_SSH_KEY" > private_key.pem
chmod 600 private_key.pem

# jar 파일 찾기
jar_file=$(find build/libs -name '*.jar' ! -name '*plain.jar' | head -n 1)

# EC2로 파일 전송 (S3 없이 직접 전송)
scp -i private_key.pem -o StrictHostKeyChecking=no "$jar_file" $EC2_USERNAME@$EC2_HOST:/home/$EC2_USERNAME/umc7thServer.jar

# EC2 접속 및 실행
ssh -i private_key.pem -o StrictHostKeyChecking=no $EC2_USERNAME@$EC2_HOST "
pgrep java | xargs -r kill -15 # 기존에 실행 중인 Java 프로세스 종료
sleep 10
nohup java -jar /home/$EC2_USERNAME/umc7thServer.jar > app.log 2>&1 & # 새 버전 애플리케이션 실행
pgrep java | xargs -r kill -15
sleep 5
# [중요] -Dspring.profiles.active=dev 옵션 추가 (dev 설정 파일 적용)
nohup java -jar -Dspring.profiles.active=dev /home/$EC2_USERNAME/umc7thServer.jar > app.log 2>&1 &
"
rm -f private_key.pem # 민감한 정보 삭제
rm -f private_key.pem
Loading