기존에는 git을 아예 사용하지 않고 배포를 진행했다.
프로젝트 수정
git commit(just 기록용)
수정된 프로젝트 빌드
./gradlew clean build
scp로 ec2 서버에 Jar 파일 전송
scp -i [서버 pem] [프로젝트 Jar 파일 경로] [파일을 저장할 ec2 경로]
ec2 서버 접속
기존 실행되던 파일 다 종료 및 삭제
kill $(lsof -t -i:8080)
rm daoTool-0.0.1-SNAPSHOT.jar & rm nohup.out
새로 들어온 파일 실행
nohup java -jar daoTool-0.0.1-SNAPSHOT.jar & > /dev/null
local에서 최신 프로젝트를 git push 해주기
서버에 폴더 생성해주기
ec2 환경에서 app 폴더를 생성해주었다.
application.yml → application.properties 로 바꾸기
git ignore한 파일 생성해주기
application.yml이 가장 대표적으로 없는 파일이었기 때문에 생성해줬다.
git pull 해주기!
gradlew 파일에 권한 부여해주기
chmod +x ./gradlew
#!/bin/bash
REPOSITORY=/home/ec2-user/app/step1
PROJECT_NAME=dao-tool-server
cd $REPOSITORY/$PROJECT_NAME/
echo “> Git Pull”
git pull
echo “> 프로젝트 Build 시작”
./gradlew build
echo “> step1 디렉토리로 이동”
cd $REPOSITORY
echo “> Build 파일 복사”
cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSITORY/
echo “> 현재 구동중인 애플리케이션 pid 확인”
# CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar)
CURRENT_PID=$(lsof -i tcp:8080 | awk ‘NR!=1 {print$2}’)
echo “현재 구동중인 애플리케이션pid: $CURRENT_PID”
if [ -z “$CURRENT_PID” ]; then
echo “> 현재 구동중인 애플리케이션이 없으므로 종료하지 않습니다.”
else
echo “> kill -9 $CURRENT_PID”
kill -9 $CURRENT_PID
sleep 5
fi
echo “> 새 애플리케이션 배포”
#JAR_NAME=$(ls -tr $REPOSITORY/ |grep jar|tail -n 1)
JAR_NAME=$(ls -tr $REPOSITORY/*.jar | tail -n 1)
echo “> JAR Name: $JAR_NAME”
nohup java -jar \
-Dspring.config.location=classpath:/home/ec2-user/app/application.properties \
$JAR_NAME 2>&1 &
권한 부여해주기
chmod +x deploy.sh
배포 실행하기
./deploy.sh
이렇게 하면 git push를 했을 때 마다 위의 명령어만 쳐주면 그 외는 자동으로 실행해준다!
앞으로 로컬에서 git push를 하면 서버를 건들 필요도 없이 바로 해주는 travis ci도 적용해보고 싶다.
[책] 스프링 부트와 AWS로 혼자 구현하는 웹 서비스