https://jootang2.tistory.com/102
NCP(네이버클라우드플랫폼), Jenkins, Docker를 활용한 무중단 배포해보기 : 다시 처음부터 : 2. Docker, J
https://jootang2.tistory.com/101 NCP(네이버클라우드플랫폼), Jenkins, Docker를 활용한 무중단 배포해보기 : 다시 처음부터 : 1.서버 생 이전 글들은 아예 서버를 만들 때 네이버에서 제공해주는 jenkins 서비스
jootang2.tistory.com
위 게시물까지 따라했으면 이제 깃 클론을 받아와서 이미지생성 후 실행하면 배포가 된다.
putty로 서버에 접속 후
- sudo mkdir /docker_projects
- sudo rm -rf /docker_projects/aaaaa/project
- sudo mkdir -p /docker_projects/aaaaa/project
- sudo chown lldj: -R /docker_projects/aaaaa/project
- cd /docker_projects/aaaaa/project
- git clone repository주소
- chmod 744 ./gradlew
그래들 빌드
- ./gradlew clean build
이미지를 만들어 주기 전에 spring에 dockerfile을 추가해줘야 이미지를 만들 수 있다.
FROM openjdk:17 //java 버전
ARG JAR_FILE=build/libs/프로젝트이름-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
그래들 빌드에 성공했으면 이미지를 만들어 준다.
- docker build -t aaaaa .
이미지 생성에 성공했으면 실행해준다.
docker run \
--name=aaaaa \
-p 8080:8080 \
-v /docker_projects/aaaaa/volumes/gen:/gen \
--restart unless-stopped \
-e TZ=Asia/Seoul \
-d \
aaaaa
docker ps 를 치면 돌아가고 있는 컨테이너들을 볼 수 있다.
배포 자동화 하기
목표 : 깃에 푸시를 하면 웹훅으로 감지해서 파이프라인을 통해 위 과정을 자동화 시킨다.
젠킨스 주소로 접속해서 새로운 아이템을 파이프라인으로 생성한다.
GitHub hook trigger를 체크해주고 파이프 라인을 작성한다.
pipeline {
agent any
tools {
jdk 'openjdk-17-jdk'
}
stages {
stage('Prepare') {
steps {
git branch: 'master',
url: 'https://github.com/jootang2/aaaaa'
}
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 timecapsule
docker rm -f timecapsule
docker rmi -f timecapsule
"""
}
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 timecapsule .
"""
}
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=timecapsule \
-p 80:8080 \
-v /docker_projects/aaaaa/volumes/gen:/gen \
--restart unless-stopped \
-e TZ=Asia/Seoul \
-d \
aaaaa
"""
}
post {
success {
sh 'echo "Docker Run Success"'
}
failure {
sh 'echo "Docker Run Fail"'
}
}
}
}
}
위 파이프라인은 예시로만 한거라서 깃 레포지토리 주소를 각자 주소로 다시 설정해주어야 한다.
정상적으로 작동되면
1. 깃 레포지토리에 푸시 => 2. 웹훅을 통해 젠킨스가 감지 => 3. 젠킨스가 파이프라인을 통해
클론을 받아와서 실행중인 컨테이너 종료, 새로운 이미지 생성 후 실행 한다.
푸시만 하면은 자동으로 위 과정들이 실행된다.
중간중간 생략한 부분들도 있고 각자 프로젝트에 따라서 달라지는 상황이 많다.
하지만 큰 틀은 있으니까 이런 방향으로 하면 어렵지 않게 배포까지 가능하다.
중간에 포기하지 않고 계속 검색하고 여러 시도를 한다면 무조건 된다.
나도 중간에 3~4번은 처음부터 다시 시작했다.
배포 끝!
'CI_CD' 카테고리의 다른 글
NCP 무료 크레딧 이용후기 (멋쟁이사자처럼 x NCP) (0) | 2022.12.20 |
---|---|
NCP(네이버클라우드플랫폼), Jenkins, Docker를 활용한 무중단 배포해보기 : 다시 처음부터 : 2. Docker, Jenkins, MariaDb 설치 (2) | 2022.11.15 |
NCP(네이버클라우드플랫폼), Jenkins, Docker를 활용한 무중단 배포해보기 : 다시 처음부터 : 1.서버 생성 (2) | 2022.11.10 |
NCP(네이버클라우드플랫폼), Jenkins, Docker를 활용한 무중단 배포해보기 _ 2 (2) | 2022.11.09 |
NCP(네이버클라우드플랫폼), Jenkins, Docker를 활용한 무중단 배포해보기 _ 1 (2) | 2022.11.08 |