본문 바로가기

:SERVER/AWS

[easyupclass] EC2 서버에 스크립트로 배포하기(3)

반응형

1. deploy.sh 파일 수정
# 9 크론 등록

#!/bin/bash

# 1. env variable
source ./var.sh
echo "1. evn variable setting complete"

# 2. cron delete
touch crontab_delete
crontab crontab_delete
rm crontab_delete
echo "2. cron delete complete"

# 3. server checking
if [ -n "${PROJECT_PID}" ]; then
  # re delpoy
  kill -9 $PROJECT_PID
  echo "3. project kill complete"
else
  # first deploy
  # 3-1. apt update, 표준 출력은 휴지통으로 이동
  sudo apt-get -y update 1>/dev/null
  echo " 3-1. apt-get update complete"
  # 3-2. jdk install
  sudo apt-get -y install openjdk-11-jdk 1>/dev/null
  echo " 3-2. jdk install complete"
  # 3-3. timezone
  sudo timedatectl set-timezone Asia/Seoul
  echo " 3-3. timezone setting complete"
fi

# 4. project folder delete
rm -rf ${HOME}/${PROJECT_NAME}
echo "4. project folder delete complete"

# 5. git clone
git clone https://github.com/${GITHUB_ID}/${PROJECT_NAME}.git
sleep 3s
echo "5. git clone complete"

# 6. gradlew 실행 권한 주기
chmod u+x ${HOME}/${PROJECT_NAME}/gradlew
echo "6. gradlew u+x complete"

# 7. build project
cd ${HOME}/${PROJECT_NAME}
./gradlew build
echo "7. gradle build complete"

# 8. start jar
nohup java -jar -Dspring.profiles.active=prod ${JAR_PATH} 1>${HOME}/log.out 2>${HOME}/err.out &
echo "8. start server complete"

# 9. cron registration
touch crontab_new
echo "* * * * * ${HOME}/check-and-restart.sh" 1>crontab_new
crontab crontab_new
rm crontab_new
echo "9. cron registration complete"

crontab에 다른 걸 추가하고 싶다면 > 이 아닌 >>(append)를 사용해야한다
>를 사용하면 덮어쓰기가 된다


2. check-and-restart.sh 파일 생성

#!/bin/bash

source ./var.sh

if [ -z "$PROJECT_PID" ]; then
  nohup java -jar -Dspring.profiles.active=prod ${JAR_PATH} 1>${HOME}/log.out 2>${HOME}/err.out &
fi

-z 명령어는 뒤에따라오는 문자열의 길이가 0이면 참이다

 파일 생성 후 check-and-restart.sh 파일에 실행권한 추가
chmod u+x check-and-restart.sh


* gradle jar 빌드할 때 테스트 없이 빌드를 하려면
./gradlew build -x test


3. 생성한 파일 (check-and-restart.sh , deploy.sh, var.sh) 3개 tar 압축
tar -cvf deploy.tar check-and-restart.sh deply.sh var.sh


-c : tar로 묶을 때
-v: 압축을 하거나 압축을 풀 때 출력을 화면에 보여줄지 말지 선택
-f: 파일 이름을 지정
-x: tar 압축을 풀 때

[tar 압축 테스트]
폴더 생성 > 파일 생성 > 파일을 tar 압축 > 파일 삭제 > tar 압축 풀기
mkdir tar-test
touch a.txt
touch b.txt
tar -cvf hello.tar a.txt b.txt
rm a.txt
rm b.txt
tar -xvf hello.tar


4. 로컬 폴더에 이동하기
sftp 접속 해서 다운로드 받기


5. ec2 인스턴스 종료 후 새로운 인스턴스를 시작
탄력적 IP 주소 연결
sftp 로 접속  > deploy.tar 파일 업로드

ssh 로 EC2 인스턴스에 접속
tar -xcf deploy.tar
압축을 풀고 실행

./deploy.sh 실행


[실습]
aws-v2-last 프로젝트로 실습해보기
기존 EC2 인스턴스 종료 후 새로운 EC2 인스턴스 생성
탄력적 IP 주소 연결
sftp로 deploy.tar 파일 업로드
tar 파일 압축 풀기
var.sh 파일 수정
프로젝트 네임과 버전 수정하기
그 뒤에 deploy.sh 파일 실행


출처: 이지업클래스 | 개발자를 위한 AWS DevOps 입문 [CI/CD 무중단 배포]
https://easyupclass.e-itwill.com/course/course_view.jsp?id=74&rtype=0&ch=course

반응형