Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
115 changes: 115 additions & 0 deletions .github/workflows/YEOJUNG-BACKEND-CICD.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
name: YEOJUNG-BACKEND-CICD

on:
push:
branches: ["main"]
pull_request:
branches: ["main"]

jobs:
ci:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
cache: gradle

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Build with Gradle
run: ./gradlew clean build -x test

cd:
runs-on: ubuntu-latest
needs: ci

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
cache: gradle

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Build with Gradle
run: ./gradlew clean build -x test

- name: Docker login
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Build and push Docker image
run: |
docker build -t ${{ secrets.DOCKER_USERNAME }}/yeojung-backend:latest .
docker push ${{ secrets.DOCKER_USERNAME }}/yeojung-backend:latest

- name: Deploy to AWS EC2
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.AWS_EC2_IP }}
username: ec2-user
key: ${{ secrets.EC2_SSH_KEY }}
script: |
docker pull ${{ secrets.DOCKER_USERNAME }}/yeojung-backend:latest
docker stop yeojung-backend || true
docker rm yeojung-backend || true
docker run -d -p 8081:8080 --name yeojung-backend \
-e DB_HOST='${{ secrets.DB_HOST }}' \
-e DB_NAME='${{ secrets.DB_NAME }}' \
-e DB_USERNAME='${{ secrets.DB_USERNAME }}' \
-e DB_PASSWORD='${{ secrets.DB_PASSWORD }}' \
-e JWT_SECRET_KEY='${{ secrets.JWT_SECRET_KEY }}' \
${{ secrets.DOCKER_USERNAME }}/yeojung-backend:latest

- name: Health check
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.AWS_EC2_IP }}
username: ec2-user
key: ${{ secrets.EC2_SSH_KEY }}
script: |
sleep 10
curl --fail http://localhost:8081/health || exit 1

- name: Rollback deployment if health check fails
if: failure()
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.AWS_EC2_IP }}
username: ec2-user
key: ${{ secrets.EC2_SSH_KEY }}
script: |
docker pull ${{ secrets.DOCKER_USERNAME }}/yeojung-backend:previous-version
docker stop yeojung-backend || true
docker rm yeojung-backend || true
docker run -d -p 8081:8080 --name yeojung-backend \
-e DB_HOST='${{ secrets.DB_HOST }}' \
-e DB_NAME='${{ secrets.DB_NAME }}' \
-e DB_USERNAME='${{ secrets.DB_USERNAME }}' \
-e DB_PASSWORD='${{ secrets.DB_PASSWORD }}' \
-e JWT_SECRET_KEY='${{ secrets.JWT_SECRET_KEY }}' \
${{ secrets.DOCKER_USERNAME }}/yeojung-backend:previous-version

- name: Check logs after deployment
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.AWS_EC2_IP }}
username: ec2-user
key: ${{ secrets.EC2_SSH_KEY }}
script: docker logs yeojung-backend
Loading