Skip to content

Merge pull request #210 from 7-umc-GrowIT/bug/#201 #81

Merge pull request #210 from 7-umc-GrowIT/bug/#201

Merge pull request #210 from 7-umc-GrowIT/bug/#201 #81

Workflow file for this run

# GrowIt 프로젝트의 CI/CD 파이프라인 워크플로우
name: GrowIt CI/CD Pipeline
# 워크플로우 트리거 조건 설정
on:
push:
branches: [ develop ] # develop 브랜치에 push가 발생할 때만 실행
# 실행할 작업들을 정의
jobs:
# 빌드 작업
build:
runs-on: ubuntu-latest # Ubuntu 최신 버전에서 실행
steps:
# 1. 깃허브 저장소 코드를 워크플로우 환경으로 가져오기
- uses: actions/checkout@v3
# 2. Java 개발 킷(JDK) 17 버전 설치 및 설정
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
distribution: 'temurin' # Eclipse Temurin JDK 사용
java-version: '17' # Java 17 버전 지정
# 3. application.yml 설정 파일 생성
- name: Make application.yml
run: |
cd ./src/main/resources # resources 디렉토리로 이동
echo "${{ secrets.APPLICATION_YML }}" > ./application.yml # GitHub Secrets에서 설정값 가져와서 파일 생성
shell: bash
# 4. gradlew 파일에 실행 권한 부여
- name: Grant execute permission for gradlew
run: chmod +x gradlew
# 5. Gradle을 사용하여 프로젝트 빌드
- name: Build with Gradle
uses: gradle/gradle-build-action@v2
with:
arguments: build -x test # 테스트 제외하고 빌드
# 6. 빌드된 JAR 파일을 아티팩트로 업로드
- name: Upload build artifact
uses: actions/upload-artifact@v4
with:
name: GrowItServer # 아티팩트 이름 지정
path: build/libs/*.jar # 업로드할 JAR 파일 경로
# 배포 작업
deploy:
needs: build # build 작업이 성공적으로 완료된 후에 실행
runs-on: ubuntu-latest
steps:
# 1. 이전 빌드 작업에서 생성된 아티팩트 다운로드
- name: Download build artifact
uses: actions/download-artifact@v4
with:
name: GrowItServer # 다운로드할 아티팩트 이름
path: build/libs/ # 저장할 경로
# 2. EC2 인스턴스에 배포
- name: Deploy to EC2
env:
# 환경 변수 설정 (GitHub Secrets에서 가져옴)
EC2_SSH_KEY: ${{ secrets.EC2_SSH_KEY }} # EC2 접속용 SSH 키
EC2_USERNAME: ${{ secrets.EC2_USERNAME }} # EC2 사용자 이름
EC2_HOST: ${{ secrets.EC2_HOST }} # EC2 호스트 주소
run: |
# SSH 키 파일 생성
echo "$EC2_SSH_KEY" > private_key.pem
# SSH 키 파일 권한 설정 (소유자만 읽기/쓰기 가능)
chmod 600 private_key.pem
# 빌드된 JAR 파일 찾기 (*plain.jar 제외)
jar_file=$(find build/libs -name '*.jar' ! -name '*plain.jar' | head -n 1)
# 기존 JAR 파일 삭제
ssh -i private_key.pem -o StrictHostKeyChecking=no $EC2_USERNAME@$EC2_HOST "
if [ -f /home/$EC2_USERNAME/GrowItServer.jar ]; then
rm -f /home/$EC2_USERNAME/GrowItServer.jar
fi
"
# JAR 파일을 EC2로 전송 (StrictHostKeyChecking 무시)
scp -i private_key.pem -o StrictHostKeyChecking=no "$jar_file" $EC2_USERNAME@$EC2_HOST:/home/$EC2_USERNAME/GrowItServer.jar
# EC2에 SSH 접속하여 애플리케이션 재시작
ssh -i private_key.pem -o StrictHostKeyChecking=no $EC2_USERNAME@$EC2_HOST "
# 실행 중인 Java 프로세스 종료
pgrep java | xargs -r kill -15
# 프로세스 종료 대기
sleep 10
# 새 버전 애플리케이션 실행 (백그라운드에서)
# app.log 파일에 표준 출력과 에러를 기록
nohup java -jar /home/$EC2_USERNAME/GrowItServer.jar > app.log 2>&1 &
"
# 보안을 위해 SSH 키 파일 삭제
rm -f private_key.pem