Merge pull request #210 from 7-umc-GrowIT/bug/#201 #81
This file contains hidden or 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
| # 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 |