Skip to content

Merge pull request #491 from LO-CO-CO/refactor/#490 #830

Merge pull request #491 from LO-CO-CO/refactor/#490

Merge pull request #491 from LO-CO-CO/refactor/#490 #830

Workflow file for this run

name: lokoko-dev CI/CD
on:
push:
branches: [ "dev" ]
pull_request:
branches: [ "dev" ]
types: [ opened, synchronize, reopened ]
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
# gradle caching
- name: Gradle Caching
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*gradle*','**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
# gradle 빌드
- name: Build with Gradle Wrapper
run: ./gradlew build -x test
# 도커 이미지 생성 후 이미지 push
- uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USER_NAME }}
password: ${{ secrets.DOCKER_USER_TOKEN }}
- uses: docker/setup-buildx-action@v3
- uses: docker/build-push-action@v6
with:
context: .
file: Dockerfile-dev
push: true
tags: ${{ secrets.DOCKER_USER_NAME }}/lokoko:latest
deploy:
runs-on: ubuntu-latest
needs: build
if: github.event_name == 'push'
steps:
- name: Deploy to EC2
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.EC2_DEV_SECRET_HOST }}
username: ${{ secrets.EC2_DEV_USER }}
key: ${{ secrets.EC2_DEV_SECRET_PEM }}
envs: GITHUB_SHA
script: |
sudo docker pull ${{ secrets.DOCKER_USER_NAME }}/lokoko:latest
ACTIVE_PORT=8080
STANDBY_PORT=8081
if sudo docker ps | grep ":8080"; then
ACTIVE_PORT=8080
STANDBY_PORT=8081
else
ACTIVE_PORT=8081
STANDBY_PORT=8080
fi
AFTER_NAME=lokoko-${STANDBY_PORT}
sudo docker run \
--network lokoko-net \
--name lokoko-${STANDBY_PORT} \
-d -p ${STANDBY_PORT}:8080 \
--env-file ./lokoko-dev.env \
-e TZ=Asia/Seoul \
${{ secrets.DOCKER_USER_NAME }}/lokoko:latest
sleep 20
for i in {1..5}; do
if curl -sf "http://localhost:${STANDBY_PORT}/health-check"; then
HEALTHY=true
echo "** Health-Check 성공: ${STANDBY_PORT} 포트 응답 OK"
break
else
echo "** Health-Check 실패, 재시도 중... (${i}/5)"
sleep 5
fi
done
if [ "$HEALTHY" = true ]; then
echo "** Health-Check 성공: ${AFTER_NAME} 컨테이너 정상 작동"
sudo docker stop lokoko-${STANDBY_PORT}
sudo docker rm lokoko-${STANDBY_PORT}
exit 1
fi
echo "{
admin 0.0.0.0:2020
}
https://15.164.250.59.nip.io {
reverse_proxy 127.0.0.1:${STANDBY_PORT}
}" | sudo tee /etc/caddy/Caddyfile
sudo systemctl reload caddy
sudo docker stop lokoko-${ACTIVE_PORT}
sudo docker rm lokoko-${ACTIVE_PORT}
sudo docker image prune -a -f