프로젝트를 진행하며, 최종 목표는 CI/CD의 자동화까지 하는 것이지만,
우선은 MVP 배포를 위해 핵심 기능의 빠른 개발을 목표로한다.
따라서 CI/CD 파이프라인은 후에 구성하는 하려는데,
기능이 추가되거나 버그를 수정할 때마다
- ssh 접속
- 구동 중인 process 종료
- 재빌드 후 배포
하는 것이 너무 귀찮아서, 일종의 반자동화(?)를 통해 조금이나마 편하게 해보려고 쉘 스크립트를 작성했다.
#!/bin/bash
REPOSITORY=~/app
PROJECT=api-gateway
cd $REPOSITORY/$PROJECT/
echo "> Pull"
git pull
echo "> Build"
./mvnw clean package -Pproduction
(-DskipTests)
CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar)
echo "구동중인 pid: $CURRENT_PID"
if [ -z "$CURRENT_PID" ]; then
echo "> 구동중인 애플리케이션이 없습니다."
else
echo "> kill -15 $CURRENT_PID"
kill -15 $CURRENT_PID
sleep 5
fi
echo "> 새 애플리케이션 배포"
JAR_NAME=$(ls -tr $REPOSITORY/$PROJECT/target/ | grep jar | tail -n 1)
nohup java -jar -Dspring.profiles.active=production $REPOSITORY/$PROJECT/target/$JAR_NAME