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