Skip to content

Update health check response message #45

Update health check response message

Update health check response message #45

Workflow file for this run

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 \"โœ… ๋ฐฐํฌ ์™„๋ฃŒ!\""
]'