#!/bin/bash## 변수 설정txtrst='\033[1;37m'# Whitetxtred='\033[1;31m'# Redtxtylw='\033[1;33m'# Yellowtxtpur='\033[1;35m'# Purpletxtgrn='\033[1;32m'# Greentxtgra='\033[1;30m'# GrayBRANCH='miniminis'## 함수 설정### 저장소 변경사항 체크functioncheck_df() {gitfetch master=$(gitrev-parse $BRANCH) remote=$(gitrev-parseorigin/$BRANCH)echo-e">>>>> master : $master"echo-e">>>>> remote : $remote"if [[ $master == $remote ]]; thenreturn1fireturn0}### 저장소 pullfunctionpull() {echo-e"${txtgrn}>>>>> Pull Request 🏃♂️ 통해 코드를 업데이트 합니다. (from origin $BRANCH) ${txtrst}"gitpullorigin $BRANCHecho-e"${txtgrn}>>>>> origin $BRANCH 으로부터 성공적으로 Pull 완료되었습니다. ${txtrst}"}### 현재 process 조회 후 종료functionkillProcess() { pid=$(pgrep-fsubway-0.0.1-SNAPSHOT.jar)if [[ -n"$pid" ]]; thenecho-e"${txtgrn}>>>>> 진행 중인 process($pid)가 존재하므로 종료합니다. ${txtrst}"kill-15 $pidecho-e"${txtgrn}>>>>> 프로세스가 정상적으로 종료되었습니다. ${txtrst}"return0fiecho-e"${txtgrn}>>>>> 진행 중인 process가 없습니다. ${txtrst}"}## 배포 스크립트echo-e"${txtylw}=======================================${txtrst}"echo-e"${txtgrn} << subway의 배포를 시작합니다 🧐 >>${txtrst}"echo-e"${txtylw}=======================================${txtrst}"echo-e"${txtgrn}>>>>> 원격 저장소의 변경사항을 체크합니다.${txtrst}"check_dfif [[ $? -eq1 ]];thenecho-e">>>>> [$(date)] 업데이트 내용이 없으므로 프로그램을 종료합니다. 😫"exit0fiecho-e">>>>> [$(date)] 업데이트 내용이 있습니다. "pullecho-e"${txtgrn}>>>>> 현재 진행 중인 process가 있는지 조회하고 있다면, 종료합니다. ${txtrst}"killProcessecho-e"${txtgrn}>>>>> 새로운 앱 빌드를 실행합니다.${txtrst}"./gradlewcleanbuild-xtestecho-e"${txtgrn}>>>>> 빌드한 앱을 시작합니다. 실행 환경을 선택해주세요(local/prod) ${txtrst}"readenvif [[ "$env"="prod" ]]; thenecho-e"${txtgrn}>>>>> 운영 환경에서 앱 배포를 시작합니다.${txtrst}"java-jar-Dspring.profiles.active=prod./build/libs/subway-0.0.1-SNAPSHOT.jar&elif [[ "$env"="local" ]]; thenecho-e"${txtgrn}>>>>> 로컬 환경에서 앱 배포를 시작합니다.${txtrst}"java-jar-Dspring.profiles.active=local./build/libs/subway-0.0.1-SNAPSHOT.jar&elseecho-e"${txtgrn}>>>>> 존재하지 않는 환경입니다. 프로세스를 종료합니다. ${txtrst}"exit0fiecho-e"${txtylw}=======================================${txtrst}"echo-e"${txtgrn}<< subway의 배포가 성공적으로 완료되었습니다 🎉>>${txtrst}"echo-e"${txtylw}=======================================${txtrst}"
사실 위의 스크립트는 코드를 읽을 줄 안다면, 어느정도는 이해하는데 무리가 없을 것이라고 생각한다. 그래서 아래에는 위의 스크립트를 만드는데 유용하게 사용했던 내용들을 몇 가지 소개할까한다.
2. 뼈대 - 반복적으로 작성하는 명령어를 script 로 작성해보기
#!/bin/bash## 변수 설정txtrst='\033[1;37m'# Whitetxtred='\033[1;31m'# Redtxtylw='\033[1;33m'# Yellowtxtpur='\033[1;35m'# Purpletxtgrn='\033[1;32m'# Greentxtgra='\033[1;30m'# Grayecho-e"${txtylw}=======================================${txtrst}"echo-e"${txtgrn} << 스크립트 🧐 >>${txtrst}"echo-e"${txtylw}=======================================${txtrst}"## 저장소 pull## gradle build## 프로세스 pid를 찾는 명령어## 프로세스를 종료하는 명령어## ...
3. 기능 단위로 함수로 만들기
기능 단위로 함수를 만드니까 나중에 오류가 발생했을 때나, 수정해야할 때, 알아보기가 쉬워서 좋았다.