본문 바로가기

IT

젠킨스(jenkins)로 스프링부트 자동화 3(파이프라인)

728x90

이번에는 Freestyle project가 아닌 Pipeline으로 만들어 보려고 한다. (결과가 좀 더 보기 좋게 나온다고함)

Pipeline sript

pipeline {
    agent any
    
    //등록한 jdk를 활성화
    tools {
        jdk 'openjdk-17-jdk'
    }
    //스테이지로 구성됨 각각의 단계
  
    stages {
    //준비 단계
        stage('Prepare') {
            steps {
                git branch: 'master',
                    url: 'https://github.com/sh970901/dockerDB'
            }
            
            post {
            	//성공했을 경우
                success { 
                    sh 'echo "Successfully Cloned Repository"'
                }
                //실패했을 경우
                failure {
                    sh 'echo "Fail Cloned Repository"'
                }
            }    
        }
        
        stage('Create Test Database') {
            //DB 테스트 단계
            steps {
                sh '''
                docker exec mariadb_1 mysql -h 127.0.0.1 -ulldjlocal -p1234 -e 'DROP DATABASE IF EXISTS app20220916_2__test;'
                '''
                sh '''
                docker exec mariadb_1 mysql -h 127.0.0.1 -ulldjlocal -p1234 -e 'CREATE DATABASE IF NOT EXISTS app20220916_2__test;'
                '''
            }
            
            post {
                success { 
                    sh 'echo "Successfully Create Database Test"'
                }
                 failure {
                    sh 'echo "Fail Create Database Test"'
                }
            }    
        }
        
        stage('Build Gradle Test') {
            //그래들 빌드 테스트
            steps {
                sh (script:'''
                    echo "Build Gradle Test Start"
                ''')

                dir('.') {
                    sh """
                    chmod +x gradlew
                    """
                }
                
                dir('.') {
                    sh """
                    activeProfile=test testDbIp=172.17.0.1 testDbId=lldjlocal testDbPw=1234 ./gradlew clean build
                    """
                }
            }
            
            post {
                success { 
                    sh 'echo "Successfully Build Gradle Test"'
                }
                 failure {
                    sh 'echo "Fail Build Gradle Test"'
                }
            }    
        }
        
        stage('Docker Rm') {
        //기존 도커 종료
            steps {
                sh 'echo "Docker Run Start"'
                sh """
                docker stop sbdb_1
                docker rm -f sbdb_1
                docker rmi -f sbdb
                """
            }
            
            post {
                success { 
                    sh 'echo "Docker Rm Success"'
                }
                failure {
                    sh 'echo "Docker Rm Fail"'
                }
            }
        }
        
        stage('Bulid Docker Image') {
        //새로운 이미지 빌드
            steps {
                sh 'echo " Image Bulid Start"'
                sh """
                docker build -t sbdb .
                """
            }
            
            post {
                success {
                    sh 'echo "Bulid Docker Image Success"'
                }

                failure {
                    sh 'echo "Bulid Docker Image Fail"'
                }
            }
        }
        
        stage('Docker Run') {
        //이미지 실행
            steps {
                sh 'echo "Docker Run Start"'
                sh """
                docker run \
                  --name=sbdb_1 \
                  -p 8080:8080 \
                  -v /docker_projects/sbdb_1/volumes/gen:/gen \
                  --restart unless-stopped \
                  -e TZ=Asia/Seoul \
                  -d \
                  sbdb
                """
            }
            
            post {
                success {
                    sh 'echo "Docker Run Success"'
                }

                failure {
                    sh 'echo "Docker Run Fail"'
                }
            }
        }
    }
}

Freestyle에서 진행하는 내용을 풀어서(?) 쓴 느낌이다. 더 세밀한 작업이 가능할 것 같다. 젠킨스 빌드를 해보고 확인해보자. 

Stage View

각 단계 별로 몇초가 걸렸는지, 그리고 각 과정의 log 등 깔끔하고 정밀한 결과를 확인 할 수 있다.

 

이제 다시 소스코드를 변경하고 커밋했을 때 결과를 보자. 

소스 코드 변경

  • 소스 코드를 변경하고 자동화가 되는지 확인해보자. 
  • 깃 허브에 Webhook을 추가했는지 체크하자. 
  • 안되어있다면 ngrok의 forwarding 주소/github-webhook/ 추가
  • commit하고 push 

webhooks 전달

  • webhooks manage에서 결과를 확인할 수 있다.

실행 결과

실행 결과

정상적으로 빌드가 자동화 되었음을 확인할 수 있다.