뭐든 즐기면서 ;)

Jenkins 자동배포 설정 3 - pipleline 작성3(Tomcat 실행) 본문

서버/JENKINS

Jenkins 자동배포 설정 3 - pipleline 작성3(Tomcat 실행)

Tada.*+ 2022. 10. 5. 16:32
728x90

Jenkins 자동배포

1. GitHub연결

2. Maven 설정

3. pipleline 작성


  • Pipeline에 Tomcat을 실행할 shell script를 작성합니다. stage('Server Start') 부분을 보시면 되고, Tomcat은 서버내에 설치되어 있다고 가정하고 진행하겠습니다. (아래, pipeline의 간단한 문법을 설명드리겠습니다.)
    • dir('shell이 실행될 경로') { sh 'shell 작성' }
    • sh 명령어를 쓰는 방법은 2가지가 있습니다. 아래 pipeline script를 참고하면 이해에 도움이 될 것 같습니다.
      1. sh '''한 번에 여러 줄의 shell을 작성할 수 있습니다.''' (작은 따옴표 3개)
      2. sh "한 줄에 하나의 shell 명령어만 실행할 수 있습니다." (큰 따옴표 1개)
pipeline {
    agent any

    environment {
        jenkins_wksp    = "${JENKINS_HOME}/workspace/${JOB_NAME}"
        module          = "front"
        build_modue     = "gather-${module}"
    }

    tools {
        maven "M3"
        jdk "JAVA8"
    }

    stages {
        stage('git checkout') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: '*/canary_new']], extensions: [], userRemoteConfigs: [[credentialsId: 'github', url: 'https://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@github.com/mindslab-ai/data-edit-tool.git']]])
            }
        }
        
        stage('Build') {
            steps {
                echo "====================== START packaging ========================="
                
                sh "cd ${jenkins_wksp}"

                sh "mvn -pl ./gather-common clean install"
                sh "mvn -pl ./${build_modue} clean package"
            }
        }
        
        stage('Server Start') {
            steps {
                echo "====================== ${build_modue} Server Start ========================="
                
                dir('../../tomcat/operator-tomcat-8.5.81'){
                    sh '''
                        ./bin/shutdown.sh
                        rm -rf ./webapps/ROOT
                        mv ./webapps/ROOT.war ./webapps/ROOT.$(date +%Y%m%d)$(date +%H)$(date +%M)$(date +%S).bak
                        sleep 1
                        
                        mv ${jenkins_wksp}/${build_modue}/target/*.war ./webapps/ROOT.war
                        sleep 2
                        
                        JENKINS_NODE_COOKIE=dontKillMe
                        ./bin/startup.sh
                    '''
                }
            }
        }
    
    }
}

* pipeline 내용 중 'JENKINS_NODE_COOKIE=dontKillMe'에 대해 설명드리겠습니다.

jenkins의 pipeline script는 모든 프로세스를 진행하고, 연관된 프로세스들과 함께 죽게 되어 있습니다. 한마디로, 위 문구 없이 pipeline을 작성하면 Tomcat은 실행된 후 바로 종료될 것입니다. 이를 해결하기 위한 문구이며, 해당 문구 다음에 작성된 명령어는 백그라운드로 실행되어질 것입니다.

728x90
Comments