카테고리 없음

[Jenkins] git commit 이벤트 발생 시 자바 프로젝트 자동 배포

개발에목마른쭌 2023. 5. 11. 19:33

- Jenkins 내부에 배포할 프로젝트에 맞는 JDK 버전, Docker

docker exec -it jenkins_1 bash

apt-get update

apt-get install openjdk-17-jdk -y
# jdk 경로 찾기
locate java | fgrep 17 | fgrep javac

 

jenkins에 도커 설치

apt-get update -y
apt-get install -y ca-certificates curl gnupg lsb-release
mkdir -p /etc/apt/keyrings
rm /etc/apt/keyrings/docker.gpg
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install -y docker-ce docker-ce-cli docker-compose-plugin

 


<사전작업>

- Item만들기(프리스타일)

- git 레포 주소, 브랜치 기입

- 생성 후 즉시 빌드 (깃에서 자동으로 pull함)

- 추가해야할 파일 있을시 생성 (application-secret.yml 등)

# 젠킨스 빌드가 실행된 경로
/docker_projects/jenkins_1/var/jenkins_home/workspace

<자동배포>

- 기존 Item 지우기

- Item 만들기 (파이프라인) 선택

- GitHub hook trigger for GITScm polling

- JDK version 등록

- 파이프라인에 자동 실행할 쉘 명령어 작성 (기존 컨테이너,이미지 삭제 / git pull / 빌드 / 도커 컨테이너 )

 

 

 

 

##### 양식

pipeline {
    agent any
    
    tools {
        jdk 'openjdk-17-jdk'
    }
    
    stages {
        stage('Prepare') {
            steps {
                git branch: '4Week',
                    url: 'https://github.com/jooooonj/Mission_LeeJaeJun'
            }
            
            post {
                success { 
                    sh 'echo "Successfully Cloned Repository"'
                }
                failure {
                    sh 'echo "Fail Cloned Repository"'
                }
            }    
        }
        
        stage('Build Gradle Test') {
            
            steps {
                sh (script:'''
                    echo "Build Gradle Test Start"
                ''')

                dir('.') {
                    sh """
                    chmod +x gradlew
                    """
                }
                
                dir('.') {
                    sh """
                    ./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 gram_1
                docker rm -f gram_1
                docker rmi -f gram
                """
            }
            
            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 gram .
                """
            }
            
            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=gram_1 \
                  -p 8080:8080 \
                  --restart unless-stopped \
                  -e TZ=Asia/Seoul \
                  -d \
                  gram
                """
            }
            
            post {
                success {
                    sh 'echo "Docker Run Success"'
                }

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

리포지터리 웹훅 추가

  • 추가해야하는 웹훅 주소 : 젠킨스에 접속하는 URL 주소 + /github-webhook/