[배포] ILikeYou 프로젝트 Docker, Jenkins 사용하여 웹 애플리케이션 배포하는 과정

2023. 5. 11. 17:18Docker

배포 환경 :

 

- MySQL

- SpringBoot

- JDK17

- Linux(배포서버)

- Docker

- Jenkins

- Git

 

순서대로 정리

 

1. SSH로 서버(Linux) 와 연결

2. docker, git, JDK, MariaDB 설치
https://developer-joon.tistory.com/174
 
3. git에서 프로젝트 받아오기 (경로는 본인만의 양식이 있으면 편리하다.)

# 경로 (양식)

m -rf /docker_projects/gram/project

mkdir -p /docker_projects/gram/project

cd /docker_projects/gram/project



4. 도커로 DB 이미지 만들어서 컨테이너 띄우기 및 프로젝트 실행에 필요한 database 환경 세팅 (외부에서 접근 가능한 database 생성, 운영모드에 사용할 테이블 생성 등)

https://developer-joon.tistory.com/176

 
** Jenkins 자동 배포까지 한다면 안해도 된다. (Jenkins에서 진행하면 됨)
5. 프로젝트 실행에 필요한 환경 세팅 (JDK 버전 확인, application-secret.yml 추가 등), gradlew 빌드 후 이미지로 만들어서 도커 컨테이너에 띄우기
https://developer-joon.tistory.com/177
 


6.  Nginx proxy manager 이미지 다운 받아서 컨테이너에 띄우기 (관리자 모드 세팅, 포트포워드 세팅, SSL적용)
https://developer-joon.tistory.com/178
 


7.  Jenkins 이미지 다운 받아서 컨테이너에 띄우기 (호스트os 도커관리 경로와 Jenkins내부 도커관리 경로를 볼륨설정 해줘야한다.)

https://developer-joon.tistory.com/180

8. Jenkins 내부에도 Docker, JDK 등 설치

docker exec -it jenkins_1 bash

apt-get update

apt-get install openjdk-17-jdk -y

## jdk 경로 찾기 (젠킨스에 나중에 등록해야됨)
	locate java | fgrep 17 | fgrep javac
# 도커설치

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


9. 젠킨스 사이트 접속해서 관리 들어가서 jdk version 설정해주기

10. Jenkins Item 프리스타일 모드로 만들어서 깃주소 입력하고 빌드 실행 (자동으로 git에서 pull 해옴) 여기에 추가해야할 파일(Dockerfile 포함) 추가 (사전작업)

11. Jenkins item 파이프라인 모드로 새로 만들기 파이프라인은 아래 과정을 수행할 수 있게끔 코드 작성. 기존 Item 삭제

+ git 리포지토리 들어가서 웹훅 추가

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


{기존 컨테이너,이미지 삭제
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"'
                }
            }
        }
    }
}