Build, Docker Iamge Build, Docker Image Push, ssh remote script를 진행하게 된다.Build : .war 혹은 .jar 파일이 생성된다Docker Iamge Build : 새로운 Job(No.) 생성된다. (이미 빌드된 이미지가 있다면 latest)Docker Image Push : 4-2.의 빌드된 이미지가 Registry로 push된다. - 1번 Job 생성# 1
EXIST_BLUE=$(docker-compose -p ${IMAGE_NAME}-blue -f docker-compose.blue.yml ps | grep Up)
# docker-compose blue로된 container가 실행이 되어있는가? 되어있다면 true
if [ -z "$EXIST_BLUE" ]; then # 만약 EXIST_BLUE가 false면
docker-compose -p ${IMAGE_NAME}-blue -f /home/{user}/docker-compose.blue.yml up -d
# 그러면 blue를 up!
BEFORE_COMPOSE_COLOR="green"
AFTER_COMPOSE_COLOR="blue"
BEFORE_PORT_NUMBER=8081
AFTER_PORT_NUMBER=8080
else
docker-compose -p ${IMAGE_NAME}-green -f /home/{user}/docker-compose.green.yml up -d
BEFORE_COMPOSE_COLOR="blue"
AFTER_COMPOSE_COLOR="green"
BEFORE_PORT_NUMBER=8080
AFTER_PORT_NUMBER=8081
fi
echo -e "\n${AFTER_COMPOSE_COLOR} server up(port:${AFTER_PORT_NUMBER})" # log 찍어주고
# 2 어플리케이션 구동하고 api날리기까지 시간이 걸리는 동안 이거 하는거임
for cnt in {1..10} # 10번 반복
do
echo "서버 응답 확인중..(${cnt}/10)";
UP=$(curl -s http://localhost:${AFTER_PORT_NUMBER}/actuator/health | grep 'UP')
# (로컬에서) 내부의 해당 포트로 동작하는곳에다가 curl 요청 up이어야 health 체크를 통과했다는 뜻! actuator/health > 헬스체크용 라이브러리
if [ -z "${UP}" ] # UP이 안떴다면
then
sleep 10
continue
else
break
fi
done
if [ $cnt -eq 10 ] # 성공했다면 이 if문 안탐
then
echo "서버가 정상적으로 구동되지 않았습니다."
exit 1 # linux에서는 1은 fail!
fi
# UP을 띄워주고 여기까지 완료되어야 저 8080 혹은 8081 사용자가 사용해도 되는 준비가 완료된 상태! 3 그러면 nginx가 port를 바꿔서 nginx를 다시 켜주면 사용자들이 바뀐 포트를 이용하고 비포는 4에서 다운시킨다.
# 3
sudo sed -i "s/${BEFORE_PORT_NUMBER}/${AFTER_PORT_NUMBER}/" /etc/nginx/sites-available/domain.com.conf
sudo nginx -s reload
echo "Deploy Completed!!"
# 4
echo "$BEFORE_COMPOSE_COLOR server down(port:${BEFORE_PORT_NUMBER})"
docker-compose -p ${IMAGE_NAME}-${BEFORE_COMPOSE_COLOR} -f docker-compose.${BEFORE_COMPOSE_COLOR}.yml down
👇 health check 했을 때 UP 뜨는거 확인!
![]()