쉘 스크립트 - 테스트 서버 한번에 배포하기

개발중인 앱의 테스트 서버를 Springboot, EC2로 구축했다.

하지만 매번 테스트 서버를 배포할 때마다 빌드, 배포 코드를 똑같이 쳐주는 게 번거로워 이 작업을 한 번에 해 줄 수 있는 쉘 스크립트를 짜보려고 한다.(쉘 스크립트 연습 겸!)


먼저, 빌드, 배포 순서는 다음과 같다.

1. BackEnd 폴더에서 github 코드를 pull 한다.

(1번은 수동으로 진행하기로 했다. 어차피 이후에 github actions와 연동할 계획이므로)

2. gradle로 빌드한다.

3. 미리 실행 중인(실행 중이 아니라면 생략) nohup 프로세스를 종료한다.

4. build/libs 의 .jar 파일을 배포한다.


위 과정을 쉘 스크립트 실행 한 번으로 대체해보자!


쉘 스크립트 파일 생성

vi deploy.sh

스크립트 파일 권한 부여

chmod +x deploy.sh  => 실행 권한 부여

쉘 스크립트 파일의 맨 위에 쉘 스크립트임을 알려주는 코드를 넣어주어야 한다.

#!/bin/bash  => 스크립트 상단에 작성



스크립트 파일을 만들었으니, 그 동안 터미널에서 사용한 명령어들을 넣어주자

1. 수작업


2. gradle 빌드

필자의 빌드 커맨드는 다음과 같다. 스크립트에 그대로 추가해 주자.

sudo ./gradlew bootjar

3. 실행중인 nohup 프로세스 종료


바로 nohup 명령어를 실행해주면 이전에 실행중인 프로세스와 충돌이 일어나 배포가 진행되지 않는다. 따라서 기존 nohup 프로세스를 종료하는 로직을 추가해주자.

sudo kill -9 $(ps -ef | grep {실행중인 파일 명} | awk '{print $2}')

- 명령어 정리

kill : 해당 프로세스 id 의 프로세스를 종료한다.

ps -ef | grep : ps로 현재 실행중인 프로세스를 검색하는데, grep으로 원하는 문자열이 포함된 프로세스만 검색할 수 있다.

awk : 테이블 형태로 된 값들을 조작하는 명령어이다. $1, $2, $3... 들은 각각 1열, 2열, 3열... 의 값들을 나타낸다. 위 명령어에선 ps 명령어가 2열이 PID 이므로 검색된 모든 PID들을 출력하게 된다.


4. jar 파일 배포

마지막으로, build/libs에 있는 jar 파일을 nohup으로 배포하는 코드이다.

cd build/libs  => 폴더 이동

sudo nohup java -jar app-0.0.1-SNAPSHOT.jar --spring.profiles.active=test   => test 환경으로 배포


댓글

이 블로그의 인기 게시물

HTML - input file 버튼 꾸미기

HTML - 이미지 미리보기(jQuery 없이)

BOJ - DNA 유사도(2612)