Information Security Study

nginx 설정파일 내의 아이피가 중복되는 문제와 무중단 배포가 안 되는 문제 해결하기 본문

네트워크 캠퍼스/3차 프로젝트

nginx 설정파일 내의 아이피가 중복되는 문제와 무중단 배포가 안 되는 문제 해결하기

gayeon_ 2024. 8. 13. 11:22

nginx 설정파일 내의 아이피가 중복되는 문제와 무중단 배포가 안 되는 문제 해결하기

 

https://gayeon-l.tistory.com/463

 

블루/그린 방식으로 무중단 배포하기

블루/그린 방식으로 무중단 배포하기 기본 로직은 이전 프로젝트에서 사용했던 블루/그린 방식의 무중단 스크립트를 참고했다. https://gayeon-l.tistory.com/431새vpc), 롤백, 무중단 배포(롤링, 블루/

gayeon-l.tistory.com

 

현재 진행상황은 위 게시글 내용과 같다.

 

 

 

Switch Traffic 단계에서 action이 add일 때 그린 서버의 ip가 추가되고

 

 

 

곧바로 블루 서버의 ip가 제거되지만 upstream 내에서 ip가 중복되는 문제와 

배포 및 CD테스트 완료 후에 로드밸런서에 업데이트하기 때문에 서비스에 중단이 발생하는 문제가 있었다.

 

 

기존 Deploy to Green 스테이지

stage('Deploy to Green') {
            steps {
                script {
                    // 그린 환경에 JAR 파일을 복사하고 배포
                    sshagent([env.SSH_KEY_ID]) {
                        copyJarToRemote(env.GREEN_ENV_IP, env.JAR_FILE)
                        deployOnServer(env.GREEN_ENV_IP, env.NGINX_IP)
                    }
                    
                    // 그린 환경 배포 확인
                    def greenStatus = checkApplicationStatus(env.GREEN_ENV_IP)
                    if (greenStatus == "200") {
                        echo "Green environment deployment succeeded."
                    } else {
                        error "Green environment deployment failed. Rolling back."
                    }
                }
            }
        }

 

기존 Deploy to Green 단계에서는 배포 전 nginx 설정 파일에서 green 서버의 ip를 제거하지 않았었다.

그렇기 때문에 배포 중에 서비스가 중된되고 배포 후에는 설정파일에서 green 서버의 ip가 중복된 것이다.

 

 

수정한 Deploy to Green 스테이지

stage('Deploy to Green') {
            steps {
                script {
                    // 그린 환경에 JAR 파일을 복사하고 배포
                    sshagent([env.SSH_KEY_ID]) {
                        // 배포 전 nginx 설정 파일에서 제거
                        updateLoadBalancer(env.GREEN_ENV_IP, env.NGINX_IP, 'remove')
                        copyJarToRemote(env.GREEN_ENV_IP, env.JAR_FILE)
                        deployOnServer(env.GREEN_ENV_IP, env.NGINX_IP)
                    }
                    
                    // 그린 환경 배포 확인
                    def greenStatus = checkApplicationStatus(env.GREEN_ENV_IP)
                    if (greenStatus == "200") {
                        echo "Green environment deployment succeeded."
                    } else {
                        error "Green environment deployment failed. Rolling back."
                    }
                }
            }
        }

 

서비스 중단, ip 중복 문제를 해결하기 위해 jar 파일 복사 전에 nginx 설정 파일에서 green 서버의 ip를 제거하도록 추가했다.

 

 

deployOnServer 단계에 들어가기 전에는 설정 파일에 그린, 블루 서버의 ip가 모두 등록되어 있다가

 

 

 

deployOnServer 단계에 도달하면 그린 서버의 ip가 제거된다.

 

 

 

후에 배포가 정상적으로 완료되면 그린 서버의 ip가 추가되고 블루 서버의 ip가 제거된다.