fix: 빌드 파일 실행 및 삭제 구문 수정 #22
Workflow file for this run
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
| name: CI/CD to AWS | |
| on: | |
| push: | |
| branches: [ "feat/cicd" ] | |
| pull_request: | |
| branches: [ "release" ] | |
| workflow_dispatch: | |
| permissions: | |
| id-token: write | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Load file in GitHub Repository | |
| uses: actions/checkout@v4 | |
| - name: Set up JDK 17 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: '17' | |
| distribution: 'temurin' | |
| - name: Set yaml file | |
| uses: fjogeleit/yaml-update-action@main | |
| with: | |
| valueFile: 'server/src/main/resources/application.yml' | |
| commitChange: false | |
| changes: | | |
| { | |
| "[3].spring.datasource.url": "${{ secrets.DB_URL }}", | |
| "[3].spring.datasource.username": "${{ secrets.DB_USERNAME }}", | |
| "[3].spring.datasource.password": "${{ secrets.DB_PASSWORD }}", | |
| "[3].jwt['secret-key']": "${{ secrets.JWT_KEY }}", | |
| "[3].jwt['expiration-days']": "${{ secrets.JWT_EXPIRATION_DAYS }}", | |
| "[3].jwt.issuer": "${{ secrets.JWT_ISSUER }}", | |
| "[3].aladin['lookup-url']": "${{ secrets.AL_LOOKUP_URL }}", | |
| "[3].aladin['search-url']": "${{ secrets.AL_SEARCH_URL }}", | |
| "[3].aladin.ttbkey": "${{ secrets.AL_TTBKEY }}", | |
| "[3].aladin['default-params'].cover": "${{ secrets.AL_COVER }}", | |
| "[3].aladin['default-params'].output": "${{ secrets.AL_OUTPUT }}", | |
| "[3].aladin['default-params'].version": "${{ secrets.AL_VERSION }}", | |
| "[3].aladin['item-id-type']": "${{ secrets.AL_ITEM_ID_TYPE }}" | |
| } | |
| - name: Test and build bootJar | |
| working-directory: ./server | |
| run: | | |
| chmod +x ./gradlew | |
| ./gradlew clean test -Dspring.profiles.active=test | |
| ./gradlew build -Dspring.profiles.active=prod -x test | |
| - name: 빌드한 파일 이름 저장 | |
| run: | | |
| FILENAME=$(basename ./server/build/libs/*.jar) | |
| echo "FILENAME=$FILENAME" >> $GITHUB_ENV | |
| - name: 빌드한 파일을 루트 디렉토리로 이동 | |
| run: | | |
| mv ./server/build/libs/${{ env.FILENAME }} ./${{ env.FILENAME }} | |
| echo "파일 이동 완료: ${{ env.FILENAME }}" | |
| - name: 현재 GitHub Action IP 받아오기 | |
| id: ip | |
| uses: haythem/[email protected] | |
| - name: AWS credential 설정 | |
| uses: aws-actions/configure-aws-credentials@v3 | |
| with: | |
| aws-region: ap-northeast-2 | |
| role-to-assume: ${{ secrets.AWS_IAM_ARN }} | |
| - name: 현재 IP를 EC2 보안그룹에 추가 | |
| run: aws ec2 authorize-security-group-ingress --group-id ${{ secrets.AWS_SG_ID }} --protocol tcp --port 22 --cidr ${{ steps.ip.outputs.ipv4 }}/32 | |
| - name: SCP 방식으로 EC2에 빌드 파일 전송 | |
| uses: appleboy/[email protected] | |
| with: | |
| host: ${{ secrets.EC2_HOST }} | |
| username: ${{ secrets.EC2_USER }} | |
| key: ${{ secrets.EC2_SSH_PRIVATE_KEY }} | |
| source: "${{ env.FILENAME }}" | |
| target: "/home/${{ secrets.EC2_USER }}" | |
| - name: 현재 실행 중인 프로세스 종료 + 서버 실행 | |
| uses: appleboy/[email protected] | |
| with: | |
| host: ${{ secrets.EC2_HOST }} | |
| username: ${{ secrets.EC2_USER }} | |
| key: ${{ secrets.EC2_SSH_PRIVATE_KEY }} | |
| script: | | |
| echo "=== 기존 프로세스 종료 ===" | |
| sudo kill -9 $(sudo lsof -ti:8080) || echo "8080 포트를 사용하는 프로세스가 없습니다." | |
| sleep 3 | |
| echo "=== 새로운 파일 실행 ===" | |
| sudo nohup java -jar -Dspring.profiles.active=prod ${{ env.FILENAME }} > ./output.log 2>&1 & | |
| echo "=== 서버 시작 대기 ===" | |
| for i in {1..30}; do | |
| if netstat -tuln | grep :8080 > /dev/null 2>&1; then | |
| echo "서버가 성공적으로 시작되었습니다!" | |
| break | |
| fi | |
| if [ $i -eq 30 ]; then | |
| echo "서버 시작 확인 타임아웃" | |
| exit 1 | |
| fi | |
| echo "서버 시작 대기 중... ($i/30)" | |
| sleep 5 | |
| done | |
| - name: 전송한 빌드 파일 정리 | |
| uses: appleboy/[email protected] | |
| with: | |
| host: ${{ secrets.EC2_HOST }} | |
| username: ${{ secrets.EC2_USER }} | |
| key: ${{ secrets.EC2_SSH_PRIVATE_KEY }} | |
| script: | | |
| echo "=== 전송한 파일 삭제 ===" | |
| rm -f ${{ env.FILENAME }} | |
| echo "파일 삭제 완료" | |
| - name: 현재 IP 보안그룹에서 삭제 | |
| run: aws ec2 revoke-security-group-ingress --group-id ${{ secrets.AWS_SG_ID }} --protocol tcp --port 22 --cidr ${{ steps.ip.outputs.ipv4 }}/32 |