[REFACTOR] #483 캠페인별 크리에이터 성과 조회 메서드 보완 #816
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |