Skip to content

Commit b8b1f4c

Browse files
author
kimyonghwa
committed
Blue / Green Deployment
1 parent 4fb9220 commit b8b1f4c

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed

deploy.sh

+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
#!/bin/bash
2+
PROFILE=$1
3+
PROJECT=SpringRestApi
4+
PROJECT_HOME=/Users/nhnent/git/${PROJECT}
5+
#PROJECT_HOME=/home/happydaddy/${PROJECT}
6+
JAR_PATH=${PROJECT_HOME}/build/libs/api-0.0.1-SNAPSHOT.jar
7+
SVR_LIST=server_${PROFILE}.list
8+
SERVERS=`cat $SVR_LIST`
9+
DEPLOY_PATH=/home/ec2-user/app
10+
AWS_ID=ec2-user
11+
DATE=`date +%Y-%m-%d-%H-%M-%S`
12+
JAVA_OPTS="-XX:MaxMetaspaceSize=128m -XX:+UseG1GC -Xss1024k -Xms128m -Xmx128m -Dfile.encoding=UTF-8"
13+
PEM=AwsFreetierKeyPair.pem
14+
PORT=8083
15+
16+
echo Deploy Start
17+
for server in $SERVERS; do
18+
echo Target server - $server
19+
# Target Server에 배포 디렉터리 생성
20+
ssh -i $PEM $AWS_ID@$server "mkdir -p $DEPLOY_PATH/dist"
21+
# Target Server에 jar 이동
22+
echo 'Executable Jar Copying...'
23+
scp -i $PEM $JAR_PATH $AWS_ID@$server:~/app/dist/$PROJECT-$DATE.jar
24+
# 이동한 jar파일의 바로가기(SymbolicLink)생성
25+
ssh -i $PEM $AWS_ID@$server "ln -Tfs $DEPLOY_PATH/dist/$PROJECT-$DATE.jar $DEPLOY_PATH/$PROJECT"
26+
# 현재 실행중인 서버 PID 조회
27+
runPid=$(ssh -i $PEM $AWS_ID@$server pgrep -f $PROJECT)
28+
if [ -z $runPid ]; then
29+
echo "No servers are running"
30+
fi
31+
# 현재 실행중인 서버의 포트를 조회. 추가로 실행할 서버의 포트 선정
32+
runPortCount=$(ssh -i $PEM $AWS_ID@$server ps -ef | grep $PROJECT | grep -v grep | grep $PORT | wc -l)
33+
if [ $runPortCount -gt 0 ]; then
34+
PORT=8084
35+
fi
36+
echo "Server $PORT Starting..."
37+
# 새로운 서버 실행
38+
ssh -i $PEM $AWS_ID@$server "nohup java -jar -Dserver.port=$PORT -Dspring.profiles.active=$PROFILE $JAVA_OPTS $DEPLOY_PATH/$PROJECT < /dev/null > std.out 2> std.err &"
39+
# 새롭게 실행한 서버의 health check
40+
echo "Health check $PORT"
41+
for retry in {1..10}
42+
do
43+
health=$(ssh -i $PEM $AWS_ID@$server curl -s http://localhost:$PORT/actuator/health)
44+
checkCount=$(echo $health | grep 'UP' | wc -l)
45+
if [ $checkCount -ge 1 ]; then
46+
echo "Server $PORT Started Normaly"
47+
# 기존 서버 Stop / Nginx 포트 변경 후 리스타트
48+
if [ $runPid -gt 0 ]; then
49+
echo "Server $runPid Stop"
50+
ssh -i $PEM $AWS_ID@$server "kill -TERM $runPid"
51+
sleep 5
52+
echo "Nginx Port Change"
53+
ssh -i $PEM $AWS_ID@$server "echo 'set \$service_addr http://127.0.0.1:$PORT;' | sudo tee /etc/nginx/conf.d/service_addr.inc"
54+
echo "Nginx reload"
55+
ssh -i $PEM $AWS_ID@$server "sudo service nginx reload"
56+
fi
57+
break;
58+
else
59+
echo "Check - false"
60+
fi
61+
sleep 5
62+
done
63+
if [ $retry -eq 10 ]; then
64+
echo "Deploy Fail"
65+
fi
66+
done
67+
echo Deploy End

0 commit comments

Comments
 (0)