새소식

반응형
250x250
My Study/Linux

Jenkins rollback job 만들기

  • -
728x90
반응형

서식 수정 및 유지 보수가 많이 들어와 배포할 프로젝트가 매 주 있었다.

 

그래서 Jenkins에서 배포를 매우 자주 했었는데 문득 그런 생각이 들었다.

 

혹시 프로젝트가 무슨 문제가 생겨 잘 되고있던 서비스가 작동하지 않으면 어쩌지..?

 

그래서 Rollback job을 만들기로 했다.

 

 

Rollback Job 만들기

먼저 원래 있던 Job을 복사해서 만드려고 봤었다.

 

그래서 여기 저기 만져보니 빌드 후 스크립트가 실행되는게 아닌가..

 

나의 계획은 빌드를 진행할 때 backup 폴더에 현재 서비스의 war파일을 복사한 뒤

 

새 war 파일로 실행을 하는 것이다.

 

그래서 Rollback job을 실행할 경우 backup 폴더에 war 파일이 존재하면 현재 서비스의 war 파일을

 

backup 폴더에 war 파일로 대체 후 재실행

 

만약 war 폴더가 없을 경우 백업된 war 파일이 없다는 메세지 출력 이었다.

 

하지만 원래 job을 복사하니 빌드 진행 된 후에 스크립트가 실행되어 큰 의미가 없었다.

 

여기 저기 찾아본 뒤 Pipeline으로 job을 만들면 된다는 정보를 얻어 Pipeline을 만들었다.

 

pipeline {
    agent any

    stages {
        stage('exist test') {
            steps {
                script {
                    def scriptResult = sh(returnStdout: true, script: 'ls /usr/test').trim()
                    if (scriptResult) {
                        echo "WAR 파일이 발견되었습니다."
                    } else {
                        error "WAR 파일이 발견되지 않았습니다. 파이프라인을 종료합니다."
                    }
                }
            }
        }
        stage('backup test') {
            steps {
                echo 'backup start'
            }
        }
        stage('rollback test') {
            steps {
                echo 'rollback start!!'
            }
        }
    }
}

 

테스트로 작성한 Pipeline이다. 

 

여기서 위 적어준 경로에 들어가 war 파일이 있는지 확인 후 있으면 진행, 없으면 종료하는 로직을 만들고 싶었다.

 

테스트를 위해 빌드를 진행해보니 오류가 발생했다..

 

엄청난 오류들....

 

그래서 확인해 본 결과 /usr 폴더의 접근 권한은 root지만 

 

Pipeline에서 접근을 시도하면 root 계정이 아니라 접근이 되지 않으면서 오류가 발생했었다.

 

나는 자꾸 'No such file or directory' 라고 뜨길래 왜 있는 폴더가 없다고 나오는지 몰랐지..

 

sudo 명령어도 시도해보고 chat gpt도 활용해봤지만 여전히 Pipeline에서는 접근이 불가능했다.

 

그래서 원래의 방법을 생각해보니 Jenkins에서 빌드 완료 시 실행되는 쉘 스크립트처럼

 

쉘 스크립트에서 실행을 하면 될 것 같았다.

 

그래서 접근 가능한 폴더에 쉘 스크립트를 만들고 Pipeline으로 그 쉘 스크립트를 실행을 하니까..!

 

 

성공했다...ㅎ

 

쉘 스크립트에는 접근이 가능하니까 쉘 스크립트에서 파일의 존재 여부를 판단한 후에 Rollback을 진행하면 되겠다.

 

Rollback 로직은 다음 기회에 정리해야겠다!

728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.