본문 바로가기
LEARN/OS

[Jenkins] 메이븐 프로젝트 빌드 및 배포 관련 파이프라인 스크립트 작성

by 아이엠제니 2024. 1. 11.

 

os: Ubuntu 22.04.2 LTS


 

pipeline {
    // 어떤 에이전트에서 실행할지 지정, 'any'는 사용 가능한 모든 에이전트에서 실행
    agent any
    
    // 환경설정 관련. 스크립트 안에 작성하기보다는 config에 작성하는 게 보안상 좋다고 한다.
    // 예시로 적어두지만, 나는 나중에 config에 환경변수를 다시 설정을 했다.
    environment {
        TOMCAT_HOME = '/home/ubuntu/tomcat8'
        JENKINS_HOME = '/var/lib/jenkins/workspace/test'
    }

    tools {
        // maven이라는 Jenkins 도구를 사용하여 빌드
        maven "maven"
    }

    stages {
        stage('git clone') {
            steps {
                // 소스 코드를 가져오는 단계
                git credentialsId: 'test', url: 'https://github.com/company/be.git'
            }
        }
        
        // 빌드
        stage('Build') {
            steps {
                // 테스트 없이 빌드
                sh "mvn clean compile install -Dmaven.test.skip=true"
                echo "------------------------- 빌드 완료 -------------------------"
            }
        }
        
        // 배포
        stage('deploy') {
            steps {
                script {
                    // Tomcat 프로세스 종료 여부 확인
                    def tomcatProcess = sh(script: 'ps -ef | grep -E "java.*catalina|Tomcat"', returnStatus: true)
                    
                    if(tomcatProcess == 0) {
                       echo "------------------------- process is running -------------------------"
                       def isRootProcess = sh(script: 'ps -ef | grep -E "java.*catalina|Tomcat" | grep root', returnStatus: true)
    
                        if (isRootProcess == 0) {
                            echo "------------------------- Tomcat is running as root. Stopping Tomcat -------------------------"
                            sh "sudo ${TOMCAT_HOME}/bin/shutdown.sh"
                            sleep 10
                        } else {
                            echo "------------------------- Tomcat is not running -------------------------"
                        }
                    } else {
                        echo "------------------------- Tomcat is not running -------------------------"
                    }
                }
                
                
                sh "sudo cp ${JENKINS_HOME}/test1/target/test1.war ${TOMCAT_HOME}/webapps/"
                sh "sudo cp ${JENKINS_HOME}/test2/target/test2.war ${TOMCAT_HOME}/webapps/"
                echo "------------------------- war 파일 이동 완료 -------------------------"
                
                
               // Tomcat 다시 시작
                    sh "sudo ${TOMCAT_HOME}/bin/startup.sh"
                    // sleep 10
                    
                echo "------------------------- 배포 완료 -------------------------"
            }
        }
    }
}

 

젠킨스에서 메이븐 프로젝트를 빌드 및 배포하기 위해 작성한 파이프라인이다.

제대로 작성된 지에 대한 확신은 없다. (봐줄 사람이 없으심... ㅠㅠ)

일단 우분투에 젠킨스 설치를 했다.

그리고 메이븐 프로젝트 관련하여 빌드 및 배포를 하기 위해서 플러그인을 설치했다.

그렇게 하니, 배포 부분이 도무지 이해가 되질 않아..

다시 파이프라인 프로젝트를 생성했다.

 

파이프라인 스크립트를 작성해서, 빌드와 배포를 한 번에 진행할 수 있게 작성하였다.

우선 빌드는 테스트 없이 진행을 한다.

그리고 배포 시에는 기존에 톰캣이 실행 중이면, 실행 중인 톰캣을 종료하고 톰캣을 다시 시작한다.

톰캣 실행 여부는 프로세스에서 확인을 하는데, 조건을 tomcat으로만 하면 정확한 확인이 어려워서!

root로 실행된 톰캣을 찾아서 종료하도록 하였다. (맞는 건가... 흠)

 

일단 위처럼 스크립트 작성하여, 실행을 해보니!

몇 번의 오류와 수정을 거쳐 현재는 빌드와 배포가 잘 된다.

다만 빌드는 잘 되었는데, 배포 시 간헐적으로 배포 실패가 뜰 때가 있었다.

배포만 실패인데, 이걸 처음부터 다시 빌드/배포를 하기는 번거로워서..!

빌드와 배포를 각각 동작할 수 있도록 만들었다.

첫 번째 배포 시에는 실패하는데, 두 번째 배포 시에는 성공하는 이유는 무엇일까.

이 부분은 다시 확인을 해봐야 할 것 같다.

300x250