Update health check response message #45
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: Deploy To EC2 (Blue-Green via SSM) | |
| on: | |
| push: | |
| branches: [ "main", "release" ] | |
| permissions: | |
| contents: read | |
| jobs: | |
| # 1๏ธโฃ BUILD JOB: Spring Boot ๋น๋ ๋ฐ ECR ํธ์ | |
| build: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-java@v4 | |
| with: | |
| distribution: temurin | |
| java-version: 17 | |
| - name: Create application-prod.yml | |
| run: echo "${{ secrets.APPLICATION_PROPERTIES }}" > ./src/main/resources/application.yml | |
| - name: Build Spring Boot | |
| run: | | |
| chmod +x ./gradlew | |
| ./gradlew clean build -x test | |
| - uses: aws-actions/configure-aws-credentials@v4 | |
| with: | |
| aws-region: ap-northeast-2 | |
| aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
| aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
| - name: Login to ECR | |
| run: | | |
| aws ecr get-login-password --region ap-northeast-2 \ | |
| | docker login --username AWS --password-stdin 839983937363.dkr.ecr.ap-northeast-2.amazonaws.com | |
| - name: Build & Push Docker Image | |
| run: | | |
| docker build -t forday . | |
| docker tag forday:latest 839983937363.dkr.ecr.ap-northeast-2.amazonaws.com/forday:latest | |
| docker push 839983937363.dkr.ecr.ap-northeast-2.amazonaws.com/forday:latest | |
| deploy: | |
| needs: build | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Configure AWS Credentials | |
| uses: aws-actions/configure-aws-credentials@v4 | |
| with: | |
| aws-region: ap-northeast-2 | |
| aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
| aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
| - name: Blue-Green Deploy via SSM | |
| run: | | |
| aws ssm send-command \ | |
| --document-name "AWS-RunShellScript" \ | |
| --instance-ids "${{ secrets.EC2_INSTANCE_ID }}" \ | |
| --comment "Blue-Green Deploy with Docker Prune" \ | |
| --parameters 'commands=[ | |
| "set -e", | |
| "echo \"โถ ํ์ฌ ์๋น์ค ์ํ ๊ฐ์ง\"", | |
| "if [ -f /etc/nginx/conf.d/service-env.inc ]; then CURRENT_VAL=$(grep -oP \"(?<=set \\$service_url ).*(?=;)\" /etc/nginx/conf.d/service-env.inc || echo \"blue\"); else CURRENT_VAL=\"blue\"; fi", | |
| "if [ \"$CURRENT_VAL\" = \"blue\" ]; then TARGET=\"green\"; TARGET_PORT=8081; OLD_TARGET=\"blue\"; else TARGET=\"blue\"; TARGET_PORT=8080; OLD_TARGET=\"green\"; fi", | |
| "echo \"โถ Target: $TARGET (Port: $TARGET_PORT)\"", | |
| "echo \"โถ ECR ๋ก๊ทธ์ธ ๋ฐ ์ด๋ฏธ์ง ํ\"", | |
| "aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 839983937363.dkr.ecr.ap-northeast-2.amazonaws.com", | |
| "docker pull 839983937363.dkr.ecr.ap-northeast-2.amazonaws.com/forday:latest", | |
| "echo \"โถ ์ ๊ท ์ปจํ ์ด๋ ์คํ\"", | |
| "docker stop $TARGET || true", | |
| "docker rm $TARGET || true", | |
| "docker run -d --name $TARGET --restart=always -e SPRING_PROFILES_ACTIVE=$TARGET -p $TARGET_PORT:8080 -e SPRING_DATA_REDIS_HOST=172.17.0.1 -e SPRING_DATA_REDIS_PORT=6379 839983937363.dkr.ecr.ap-northeast-2.amazonaws.com/forday:latest", | |
| "echo \"โถ ํฌ์ค ์ฒดํฌ ์งํ\"", | |
| "HEALTH_OK=false", | |
| "for i in {1..20}; do if curl -sf http://localhost:$TARGET_PORT/health_check; then HEALTH_OK=true; break; fi; echo \"Checking... $i\"; sleep 5; done", | |
| "if [ \"$HEALTH_OK\" != \"true\" ]; then echo \"โ ๋ฐฐํฌ ์คํจ (Health Check Failed)\"; docker logs $TARGET; exit 1; fi", | |
| "echo \"โถ Nginx ์ค์์นญ ๋ฐ ๋ฆฌ๋ก๋\"", | |
| "echo \"set \\$service_url $TARGET;\" | sudo tee /etc/nginx/conf.d/service-env.inc", | |
| "sudo nginx -s reload", | |
| "echo \"โถ ๊ตฌ ๋ฒ์ ์ปจํ ์ด๋ ์ค์ง ๋ฐ ์ด๋ฏธ์ง ์ ๋ฆฌ\"", | |
| "docker stop $OLD_TARGET || true", | |
| "docker rm $OLD_TARGET || true", | |
| "docker image prune -af", | |
| "echo \"โ ๋ฐฐํฌ ์๋ฃ!\"" | |
| ]' |