반응형
2021.11.06 - [DevOps] - [Jenkins 다중서버 무중단 배포 4/5] Pipeline 생성 및 스크립트 작성
개요
Jenkins를 통해서 Spring Boot 애플리케이션을 다수의 서버에 무중단으로 배포하는 것을 목표로 합니다.
이글에서는 서버단 배포 스크립트를 작성하겠습니다.
- Spring Boot 서버 어플리케이션을 실행하기 위한 스크립트입니다.
- 서버가 실행되면 이를 체크하기 위한 스크립트입니다.
스크립트는 개발환경(ex: maven, gradle) 및 서버 환경(ex: ubuntu, centos)에 따라 수정해야 할 수 있습니다.
문서환경은 ubuntu 20.04, gradle 7.1.1 환경입니다.
스크립트 작성
스크립트 폴더 구조입니다.
deploy_server.sh
# (1)
REPOSITORY=/home
BUILD_PATH=$(ls -tr ${REPOSITORY}/build/lib/*.jar | tail -1)
JAR_NAME=$(basename $BUILD_PATH)
echo "> build file: $JAR_NAME"
# (2)
echo "> copy build file"
DEPLOY_PATH=${REPOSITORY}/deploy/
if [ ! -d $DEPLOY_PATH ]; then
mkdir $DEPLOY_PATH
fi
cp $BUILD_PATH $DEPLOY_PATH
echo "> change file name"
CP_JAR_PATH=$DEPLOY_PATH$JAR_NAME
APPLICATION_JAR_NAME=application-deploy.jar
APPLICATION_JAR=$DEPLOY_PATH$APPLICATION_JAR_NAME
echo "> create link"
ln -Tfs $CP_JAR_PATH $APPLICATION_JAR
# (3)
echo "> Check application PID."
CURRENT_PID=$(pgrep -f -n $APPLICATION_JAR_NAME)
echo "$CURRENT_PID"
if [ -z $CURRENT_PID ];
then
echo "> No running applications found."
else
echo "> kill -9 $CURRENT_PID"
kill -9 $CURRENT_PID
sleep 10
fi
# (4)
echo "> Run application."
nohup java -jar -Dspring.profiles.active=local $APPLICATION_JAR > /dev/null 2> /dev/null < /dev/null &
- 빌드된 파일 디렉터리 설정입니다. 폴더내 최근 1개 파일을 선택합니다.
- 업로드된 파일을 작업 폴더로 이동합니다. 이동 후 빌드 파일 링크를 신규 파일로 대체합니다.
- 기존 서버가 살아 있으면 다운시킵니다.
- 애플리케이션을 실행합니다. '-Dspring.profiles.active=local'은 운영환경에 맞게 조절하세요.
health_check.sh
#!/bin/bash
# (1)
url="http://localhost:8080/board/1"
timeout=5
online=false
echo "Checking status of $url."
# (2)
loopCount=1
while [ $loopCount -le 10 ]
do
code=$(curl -sL --connect-timeout 20 --max-time 30 -w "%{http_code}\\n" "$url" -o /dev/null)
echo "try $loopCount => code: $code"
if [ "$code" = "200" ]; then
online=true
break
else
loopCount=$((loopCount + 1))
sleep $timeout
fi
done
# (3)
if $online; then
echo "Monitor finished, website is online."
exit 0 # Success
else
echo "Monitor failed, website seems to be down."
exit 1 # Failed
fi
- 상태를 체크하는 URL입니다. 구현에 맞게 변경해주세요.
- 해당 URL을 curl로 실행해서 HttpStatus가 200이 나올 때까지 10번 시도합니다.
- 체크가 성공했다면 다음 작업(다음 서버 배포)을 실행하고, 그렇지 않으면 배포는 중단됩니다.
배포
수동배포
대시보드에서 해당프로젝트로 이동 후 'Build Now'를 클릭하면 배포가 진행 됩니다.
프로젝트 대시보드에서 현재 진행상태를 확인할 수 있습니다.
빌드번호를 클릭하면
보다 자세한 로그를 확인 할 수 있습니다.
자동배포
이제 Github에 코드를 Push하면 빌드가 자동으로 진행됩니다.
728x90
'DevOps' 카테고리의 다른 글
Jenkins Pipeline Slack 연동 (0) | 2021.11.07 |
---|---|
[Jenkins 다중서버 무중단 배포 4/5] Pipeline 생성 및 스크립트 작성 (0) | 2021.11.06 |
[Jenkins 다중서버 무중단 배포 3/5] Github 연동 (0) | 2021.11.06 |
[Jenkins 다중서버 무중단 배포 2/5] 서버 등록 (0) | 2021.10.30 |
[Jenkins 다중서버 무중단 배포 1/5] Jenkins 설치 (0) | 2021.10.30 |