Skip to content

Update deploy.yml

Update deploy.yml #39

Workflow file for this run

name: Deploy Backend to EC2
on:
push:
branches:
- main
jobs:
deploy-backend:
runs-on: ubuntu-latest
# 환경변수 설정
env:
AWS_SG_ID: ${{ secrets.AWS_SG_ID }}
AWS_SG_RDS_ID: ${{ secrets.AWS_SG_RDS_ID }}
AWS_DEFAULT_REGION: ap-northeast-2
AWS_EC2_SSH_KEY: ${{ secrets.AWS_EC2_SSH_KEY }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
APPLICATION_YML: ${{ secrets.APPLICATION_YML }}
AWS_EC2_DNS: ${{ secrets.AWS_EC2_DNS }}
AWS_EC2_USERNAME: ${{ secrets.AWS_EC2_USERNAME }}
APPLICATION_JAR_NAME: ${{ secrets.APPLICATION_JAR_NAME }}
steps:
# Java 21 설치
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '21'
# Github action IP 가져오기
- name: Get Github action IP
id: ip
uses: haythem/[email protected]
# 배포 브랜치 지정 (with: ref: 옵션이 없을 경우 트리거가 되는 브랜치)
- name: Checkout branch
uses: actions/checkout@v2
# secrets 내용을 읽어 yml 파일을 특정 위치에 생성
- name: Create application.yml
run: |
echo -e "${{ env.APPLICATION_YML }}" > ./src/main/resources/application.yml
# SSH Agent 설정 및 GitHub Secrets에 저장된 SSH 키 로드
- name: Set up SSH agent
uses: webfactory/[email protected]
with:
ssh-private-key: ${{ env.AWS_EC2_SSH_KEY }}
# Github action IP 보안그룹에 추가
- name: Add Github Actions IP to Security group
run: |
aws ec2 authorize-security-group-ingress --group-id ${{ env.AWS_SG_ID }} --protocol tcp --port 22 --cidr ${{ steps.ip.outputs.ipv4 }}/32
aws ec2 authorize-security-group-ingress --group-id ${{ env.AWS_SG_RDS_ID }} --protocol tcp --port 3306 --cidr ${{ steps.ip.outputs.ipv4 }}/32
# EC2 호스트 키 등록
- name: Add EC2 to known hosts
run: ssh-keyscan -H ${{ env.AWS_EC2_DNS }} >> ~/.ssh/known_hosts
# Install Docker Compose
- name: Install Docker Compose
run: |
sudo curl -L "https://github.com/docker/compose/releases/download/v2.3.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
# Docker Compose로 필요한 서비스 실행
- name: Run Docker Compose
run: |
docker-compose up -d
# Wait for Elasticsearch and run init-index.sh
- name: Wait for Elasticsearch and run init script
run: |
docker-compose up init-script
# Build Application
- name: Build the application
run: ./gradlew build
# EC2에 빌드된 소스 배포
- name: Deploy source to EC2
run: |
scp init-index.sh ${{ env.AWS_EC2_USERNAME }}@${{ env.AWS_EC2_DNS }}:/home/ubuntu/catchweak
scp docker-compose.yml ${{ env.AWS_EC2_USERNAME }}@${{ env.AWS_EC2_DNS }}:/home/ubuntu/catchweak
scp -r build/libs ${{ env.AWS_EC2_USERNAME }}@${{ env.AWS_EC2_DNS }}:/home/ubuntu/catchweak
# 환경 세팅 docker-compose.yml 및 init-index.sh 실행
- name: Run Envirenments scripts
run: |
ssh ${{ env.AWS_EC2_USERNAME }}@${{ env.AWS_EC2_DNS }} << EOF
cd /home/ubuntu/catchweak
chmod +x init-index.sh
docker-compose up -d
EOF
# 기존 서버 종료
- name: Stop running server
run: |
ssh ${{ env.AWS_EC2_USERNAME }}@${{ env.AWS_EC2_DNS }} << EOF
pkill -f 'java -jar ${{ env.APPLICATION_JAR_NAME }}.jar' || echo "No running server found"
EOF
# 서버 실행
- name: Run Backend server
run: |
ssh ${{ env.AWS_EC2_USERNAME }}@${{ env.AWS_EC2_DNS }} << EOF
cd /home/ubuntu/catchweak
./gradlew build
nohup java -jar /home/ubuntu/catchweak/libs/${{ env.APPLICATION_JAR_NAME }}.jar &
EOF
# Github action IP 보안그룹에서 제거 (배포 후)
- name: Remove Github Actions IP from Security group
run: |
aws ec2 revoke-security-group-ingress --group-id ${{ env.AWS_SG_ID }} --protocol tcp --port 22 --cidr ${{ steps.ip.outputs.ipv4 }}/32
aws ec2 revoke-security-group-ingress --group-id ${{ env.AWS_SG_RDS_ID }} --protocol tcp --port 3306 --cidr ${{ steps.ip.outputs.ipv4 }}/32