Skip to content

[FIX/#474]

[FIX/#474] #108

Workflow file for this run

name: CI/CD Pipeline
on:
push:
branches: [ main ]
workflow_dispatch:
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'
- name: Make application.yml
run: |
cd ./src/main/resources
echo "${{ secrets.APPLICATION_YML }}" > ./application.yml
shell: bash
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
uses: gradle/gradle-build-action@v2
with:
arguments: build -x test
# ๐Ÿ”ต ํ˜„์žฌ ํ™œ์„ฑ ํฌํŠธ ์ฝ๊ธฐ
# - name: Get Current Active Port
# id: get-port
# uses: appleboy/ssh-action@v0.1.10
# with:
# host: ${{ secrets.EC2_HOST }}
# username: ${{ secrets.EC2_USERNAME }}
# key: ${{ secrets.EC2_SSH_KEY }}
# script: |
# PORT=$(sudo grep -oP 'server 127\.0\.0\.1:\K\d+' /etc/nginx/sites-available/default | head -n 1)
# echo -n "$PORT"
- name: Get Current Active Port
id: get-port
uses: appleboy/ssh-action@v1.2.2
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_SSH_KEY }}
capture_stdout: true
script: |
sudo grep -oP 'server 127\.0\.0\.1:\K\d+' /etc/nginx/sites-available/default | head -n 1
# - name: Set Target Version
# run: |
# if [ "${{ steps.get-port.outputs.stdout }}" == "8081" ]; then
# echo "TARGET_VERSION=green" >> $GITHUB_ENV
# else
# echo "TARGET_VERSION=blue" >> $GITHUB_ENV
# fi
- name: Set Target Version
run: |
PORT=$(echo "${{ steps.get-port.outputs.stdout }}" | tr -d '[:space:]' | grep -o '^[0-9]\+')
echo "์ถ”์ถœ๋œ PORT ๊ฐ’: $PORT"
if [ "$PORT" == "8081" ]; then
echo "TARGET_VERSION=green" >> $GITHUB_ENV
else
echo "TARGET_VERSION=blue" >> $GITHUB_ENV
fi
# ๐Ÿ”ต Docker Image Build
- name: Build Docker Image
run: |
echo "Building for $TARGET_VERSION"
docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/stackpot-server:${{ env.TARGET_VERSION }} .
# ๐Ÿ”ต DockerHub Login
- name: Login to DockerHub
run: echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login -u "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
# ๐Ÿ”ต Push Docker Image
- name: Push Docker Image
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/stackpot-server:${{ env.TARGET_VERSION }}
# ๐Ÿ”ต SSH into EC2 and Deploy
- name: SSH into EC2 and Deploy
uses: appleboy/ssh-action@v1.2.2
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_SSH_KEY }}
script: |
cd ~/stackpot
echo "[INFO] ํ™œ์„ฑํ™”๋œ ํฌํŠธ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค."
ACTIVE_PORT=$(sudo grep -oP 'server 127\.0\.0\.1:\K\d+' /etc/nginx/sites-available/default | head -n 1)
if [ "$ACTIVE_PORT" = "8081" ]; then
echo "[INFO] ํ˜„์žฌ active: 8081 (blue). green์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค."
sudo docker-compose pull stackpot-server-green
sudo docker-compose up -d --no-deps --build stackpot-server-green
else
echo "[INFO] ํ˜„์žฌ active: 8082 (green). blue๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค."
sudo docker-compose pull stackpot-server-blue
sudo docker-compose up -d --no-deps --build stackpot-server-blue
fi
echo "[INFO] ํ•„์š” ์—†๋Š” Docker ์ด๋ฏธ์ง€ ์ •๋ฆฌ"
sudo docker image prune -f
echo "[INFO] Nginx ์Šค์œ„์นญ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰"
./switch_backend.sh