Skip to content

Commit 4efe073

Browse files
authored
Merge pull request #147 from Central-MakeUs/dev
deploy: 배포 스크립트 수정
2 parents 22b12b5 + 8af7243 commit 4efe073

File tree

1 file changed

+29
-39
lines changed

1 file changed

+29
-39
lines changed

.github/workflows/deploy.yml

Lines changed: 29 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,23 @@ permissions:
88
contents: read
99

1010
jobs:
11-
# 1️⃣ BUILD JOB: 빌드 및 ECR 이미지 업로드
1211
build:
1312
runs-on: ubuntu-latest
1413
steps:
1514
- uses: actions/checkout@v4
1615

17-
- uses: images/setup-java@v4
16+
# ✅ 수정: actions/setup-java 사용 및 with 위치 교정
17+
- name: Set up JDK 17
18+
uses: actions/setup-java@v4
1819
with:
19-
distribution: temurin
20-
java-version: 17
20+
java-version: '17'
21+
distribution: 'temurin'
22+
cache: gradle # 빌드 속도 향상을 위한 캐싱 추가
2123

22-
- name: Create application-prod.yml
23-
run: echo "${{ secrets.APPLICATION_PROPERTIES }}" > ./src/main/resources/application.yml
24+
- name: Create application.yml
25+
run: |
26+
mkdir -p ./src/main/resources
27+
echo "${{ secrets.APPLICATION_PROPERTIES }}" > ./src/main/resources/application.yml
2428
2529
- name: Build Spring Boot
2630
run: |
@@ -35,17 +39,15 @@ jobs:
3539
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
3640

3741
- name: Login to ECR
38-
run: |
39-
aws ecr get-login-password --region ap-northeast-2 \
40-
| docker login --username AWS --password-stdin 839983937363.dkr.ecr.ap-northeast-2.amazonaws.com
42+
id: login-ecr
43+
uses: aws-actions/amazon-ecr-login@v2
4144

4245
- name: Build & Push Docker Image
4346
run: |
4447
docker build -t forday .
4548
docker tag forday:latest 839983937363.dkr.ecr.ap-northeast-2.amazonaws.com/forday:latest
4649
docker push 839983937363.dkr.ecr.ap-northeast-2.amazonaws.com/forday:latest
4750
48-
# 2️⃣ DEPLOY JOB: Public EC2에 직접 접속하여 배포
4951
deploy:
5052
needs: build
5153
runs-on: ubuntu-latest
@@ -55,8 +57,6 @@ jobs:
5557
mkdir -p ~/.ssh
5658
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
5759
chmod 600 ~/.ssh/id_rsa
58-
59-
# 별칭(Alias)을 'ec2-server'로 설정하여 접속 간소화
6060
cat <<EOF >> ~/.ssh/config
6161
Host ec2-server
6262
HostName ${{ secrets.EC2_PUBLIC_IP }}
@@ -70,14 +70,17 @@ jobs:
7070
ssh ec2-server << 'EOF'
7171
set -e
7272
73+
# ✅ 추가: EC2에 AWS CLI가 설치되어 있어야 함
74+
# ECR 로그인을 위해 AWS 자격 증명이 EC2에도 설정되어 있거나 IAM Role이 부여되어야 합니다.
75+
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 839983937363.dkr.ecr.ap-northeast-2.amazonaws.com
76+
7377
echo "▶ Nginx 환경 설정 확인"
74-
if [ -f /etc/nginx/conf.d/service-env.inc ]; then
75-
CURRENT_VAL=$(grep -oP '(?<=set \$service_url ).*(?=;)' /etc/nginx/conf.d/service-env.inc || echo "blue")
76-
else
77-
CURRENT_VAL="blue"
78+
# 파일이 없으면 생성
79+
if [ ! -f /etc/nginx/conf.d/service-env.inc ]; then
80+
echo "set \$service_url blue;" | sudo tee /etc/nginx/conf.d/service-env.inc
7881
fi
79-
80-
echo "현재 서비스 위치: $CURRENT_VAL"
82+
83+
CURRENT_VAL=$(grep -oP '(?<=set \$service_url ).*(?=;)' /etc/nginx/conf.d/service-env.inc || echo "blue")
8184
8285
if [ "$CURRENT_VAL" = "blue" ]; then
8386
TARGET="green"
@@ -90,32 +93,22 @@ jobs:
9093
fi
9194
9295
echo "▶ 배포 대상: $TARGET (포트: $TARGET_PORT)"
93-
94-
# EC2 내부에서 ECR 로그인
95-
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 839983937363.dkr.ecr.ap-northeast-2.amazonaws.com
96-
97-
echo "▶ 최신 이미지 Pull"
9896
docker pull 839983937363.dkr.ecr.ap-northeast-2.amazonaws.com/forday:latest
9997
100-
echo "▶ $TARGET 컨테이너 초기화"
10198
docker stop $TARGET || true
10299
docker rm $TARGET || true
103100
104-
echo "▶ $TARGET 컨테이너 실행"
105101
docker run -d \
106102
--name $TARGET \
107103
--restart=always \
108-
-e SPRING_PROFILES_ACTIVE=$TARGET \
109104
-p $TARGET_PORT:8080 \
110-
-e SPRING_DATA_REDIS_HOST=172.17.0.1 \
111-
-e SPRING_DATA_REDIS_PORT=6379 \
105+
-e SPRING_PROFILES_ACTIVE=prod \
112106
839983937363.dkr.ecr.ap-northeast-2.amazonaws.com/forday:latest
113107
114-
echo "▶ 헬스 체크 시작 (http://localhost:$TARGET_PORT/health_check)"
115-
HEALTH_OK=false
108+
echo "▶ 헬스 체크 시작"
116109
for i in {1..20}; do
110+
# Spring Boot 기본 헬스체크 경로(/actuator/health) 또는 지정하신 경로 확인 필요
117111
if curl -sf http://localhost:$TARGET_PORT/health_check; then
118-
echo "✅ 헬스 체크 성공!"
119112
HEALTH_OK=true
120113
break
121114
fi
@@ -124,20 +117,17 @@ jobs:
124117
done
125118
126119
if [ "$HEALTH_OK" != "true" ]; then
127-
echo "❌ 헬스 체크 실패. 배포를 중단합니다."
120+
echo "❌ 헬스 체크 실패"
128121
docker logs $TARGET
129122
exit 1
130123
fi
131124
132-
echo "▶ Nginx 스위칭: $TARGET"
125+
echo "▶ Nginx 스위칭"
133126
echo "set \$service_url $TARGET;" | sudo tee /etc/nginx/conf.d/service-env.inc
127+
sudo nginx -t && sudo nginx -s reload
134128
135-
sudo nginx -t
136-
sudo nginx -s reload
137-
138-
echo "▶ 이전 컨테이너($OLD_TARGET) 정리"
129+
echo "▶ 이전 컨테이너 정리 및 미사용 이미지 삭제"
139130
docker stop $OLD_TARGET || true
140131
docker rm $OLD_TARGET || true
141-
142-
echo "🚀 배포 완료! 현재 실행 중: $TARGET"
132+
docker image prune -af
143133
EOF

0 commit comments

Comments
 (0)