[FIX/#474] #108
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: 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 |