요구사항
소스 코드를 배포한 후 문제가 발생할 경우 빠르게 원복(롤백, rollback)할 수 있는 환경을 구축한다
① 배포 스크립트( deploy.sh ) 개선
② 원복(롤백) 스크립트( rollback.sh) 구현
참고. 영상 자료
https://www.youtube.com/watch?v=UqocnEIX-mA
https://www.youtube.com/watch?v=7OSzN16FqCw
1. 배포 스크립트( deploy.sh ) 개선
개선할 부분
① /home/releases/프로젝트 디렉토리 생성하여 빌드 디렉토리를 rename 하여 이동시킨다
② 배포할 디렉토리를 TOMCAT_HOME/webapps의 ROOT로 심볼릭 링크 생성 후 톰캣 재시작한다
deploy.sh 수정
#!/bin/bash
REPOSITORY_DIR=~/repositories/jwp-basic
TOMCAT_DIR=~/tomcat
RELEASE_DIR=~/releases/jwp-basic
cd $REPOSITORY_DIR
git pull
mvn clean package -DskipTests
$TOMCAT_DIR/bin/shutdown.sh
rm -rf $TOMCAT_DIR/webapps/ROOT
cd target
# build 디렉토리를 ~/releases/jwp-basic/$C_TIME 으로 이동
C_TIME=$(date +%s)
echo "time : $C_TIME"
mv $REPOSITORY_DIR/target/jwp-basic $RELEASE_DIR/$C_TIME
# release 디렉토리의 빌드결과물을 심볼릭 링크 걸어 webapps/ROOT생성
ln -s $RELEASE_DIR/$C_TIME $TOMCAT_DIR/webapps/ROOT
$TOMCAT_DIR/bin/startup.sh
tail -500f $TOMCAT_DIR/logs/catalina.out
2. 원복(롤백) 스크립트( rollback.sh ) 구현
script 명령어 절차
① 톰캣 서버 종료
② 배포 디렉토리에서 원복할 디렉토리(현재 서비스 중인 디렉토리 직전 디렉토리)를 찾는다.
- 구글에서 "shell script find all directories sort date"와 같은 키워드를 입력해 배포 디렉토리를 시간 역순으로 구한다.
- 시간 역순으로 구한 디렉토리 목록에서 \n(new line)을 기준으로 분리해 배열로 만든다.
구글에서 "shell script split string to array"와 같은 키워드를 입력한다.
- 배포 디렉토리 2개 미만이면 "원복할 디렉토리가 없다"는 메시지 출력하고 배포 스크립트 종료
- if[ "${#REVISIONS[@]}" -lt 2 ]; then exit // 2개 less than 이면 종료
- 배포 디렉토리 2개 이상이면 2번째 디렉토리 목록을 반환 ${REVISIONS[1]}
③ TOMCAT_HOME/webapps/ROOT 심볼릭 링크 삭제
④ 앞에서 찾은 원복할 디렉토리를 TOMCAT_HOME/webapps/ROOT 심볼릭 링크로 생성
⑤ 톰캣 서버 재시작
rollback.sh 생성
$ cd ~/scripts
$ vim rollback.sh
rollback.sh 전체
#!/bin/bash
REPOSITORIES_DIR=~/releases/jwp-basic
TOMCAT_DIR=~/tomcat
# 명령어 결과를 변수 할당시 아래와 같이
RELEASES=$(ls -1t $REPOSITORIES_DIR)
echo "$RELEASES"
REVISIONS=(${RELEASES//\n/})
if [ "${#REVISIONS[@]}" -lt 2 ]; then
echo "release source length more than 2"
else
echo "rollback directory : ${REVISIONS[1]}"
$TOMCAT_DIR/bin/shutdown.sh
rm -rf $TOMCAT_DIR/webapps/ROOT
ln -s $REPOSITORIES_DIR/${REVISIONS[1]} $TOMCAT_DIR/webapps/ROOT
$TOMCAT_DIR/bin/startup.sh
tail -500f $TOMCAT_DIR/logs/catalina.out
fi
ls -1t $REPOSITORIES_DIR 명령어 실행할 경우 아래와 같이 디렉토리가 내림차순으로 정렬되게 된다
ㄴ-1tr의 경우 reverse로 오름차순
최신 빌드 결과 파일에 문제가 있기 때문에 그 이전인 ${REVISIONS[1]} == 1699588462 디렉토리를 바라보게 된다
- 인덱스가 0번부터 시작되는 것으로 파악된다
"${#REVISIONS[@]}" 의 경우 배열의 길이를 나타낸다 ( ${#array[@]} )
권한 수정 및 실행
$ chmod -R 755 rollback.sh
$ ./rollback.sh
도서에서는 임의 script를 작성하는 방식으로 설명한 것으로 보였다
아직 releases 디렉토리 관리하는 거나 rollback.sh 에 실행되는 시점에 대해서 개선할 점이 남아 있어 보인다
이후 추가적으로 공부하면 포스팅을 하도록 해야 겠다
'독서 > 📚' 카테고리의 다른 글
[Next Step] 3~4장 HTTP 웹서버 구현을 통해 HTTP 이해하기(No Framework) (0) | 2023.11.15 |
---|---|
[Next Step] 12.8 웹서버 도입을 통한 서비스 운영(p458) 정리 (0) | 2023.11.10 |
[Next Step] 6.6 쉘 스크립트를 활용한 배포 자동화(p218) 정리 (0) | 2023.11.03 |
무료 전자 도서관 이용 후기 (with 교보문고 전자 도서관 앱) (0) | 2023.11.03 |
[Next Step] 3.3 원격 서버에 배포 (p84) 정리 (0) | 2023.07.11 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!