Skip to content

fix: 빌드 파일 실행 및 삭제 구문 수정 #22

fix: 빌드 파일 실행 및 삭제 구문 수정

fix: 빌드 파일 실행 및 삭제 구문 수정 #22

Workflow file for this run

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