티스토리 뷰
728x90
반응형
https://kdg-is.tistory.com/270
위의 링크에서는 Freestyle Project 방법으로 구현하였습니다. 지금부터 진행할 예제는 Pipeline을 사용하여 구현하는 방법을 알아보겠습니다.
1.Credentials 키를 만듭니다.
Docker Hub와 Git Hub에 접근할 수 있는 2개의 키를 만듭니다.
💡 Docker Hub에 로그인할 수 있는 키를 먼저 만들겠습니다.
- Username - 도커 허브 아이디 입력
- Password - 도커 허브 비밀번호 입력
- ID - 파이프 라인 코드에서 식별할 값 입력 (ex: Docker-Hub)
💡 Git Hub에 로그인할 수 있는 키를 만들겠습니다.
- Username - 깃 허브 아이디 입력
- Password - 깃 허브 access_token
- ID - 파이프 라인 코드에서 식별할 값 입력 (ex: Git-Hub)
2. 새로운 아이템 생성 (Pipeline 프로젝트)
Pipeline으로 새로운 아이템을 하나 만듭니다.
💡 General 설정
- Git Hub의 url을 입력해줍니다.
💡 Pipeline 설정
- DefiDefinition은 Pipeline script로 설정합니다.
- 하나의 스테이지씩 설명드리겠습니다.
pipeline {
agent any
environment {
DOCKER_IMAGE_NAME = 'kdg0209/example' 도커 허브 레포지토리
DOCKER_IMAGE = ''
}
stages {
stage('Prepare') {
steps {
sh 'echo "Clonning Repository"'
git branch: 'dev',
url: 'https://github.com/kdg0209/example.git',
credentialsId: 'Git-Hub'
}
post {
success {
sh 'echo "Successfully Cloned Repository"'
}
failure {
sh 'echo "Fail Cloned Repository"'
}
}
}
stage('Bulid Gradle') {
steps {
sh 'echo "Bulid Gradle Start"'
dir('.') {
sh """
./gradlew clean build --exclude-task test
"""
}
}
post {
failure {
sh 'echo "Bulid Gradle Fail"'
}
}
}
stage('Bulid Docker') {
steps {
sh 'echo " Image Bulid Start"'
script {
DOCKER_IMAGE = docker.build DOCKER_IMAGE_NAME
}
}
post {
failure {
sh 'echo "Bulid Docker Fail"'
}
}
}
stage('Push Docker') {
steps {
sh 'echo "Docker Image Push Start"'
script {
docker.withRegistry('https://registry.hub.docker.com', "Docker-Hub") {
DOCKER_IMAGE.push("latest")
}
}
}
post {
success {
sh 'docker rmi $(docker images -q -f dangling=true)'
}
failure {
error 'Docker Image Push Fail'
}
}
}
stage('Remote Server Docker Pull') {
steps([$class: 'BapSshPromotionPublisherPlugin']) {
sh 'echo "Remote Server Docker Pull Start"'
sshPublisher(
continueOnError: false, failOnError: true,
publishers: [
sshPublisherDesc(
configName: "remote-server",
verbose: true,
transfers: [
sshTransfer(
execCommand: "sh /home/scripts/spring-container.sh"
)
]
)
]
)
}
post {
success {
sh 'echo "Completed Remote Server Docker Pull"'
}
failure {
sh 'echo "Fail Remote Server Docker Pull"'
}
}
}
}
}
💡 Prepare stage 설정
- branch - 깃의 브런치를 의미합니다.
- url - 레포지토리 링크를 의미합니다.
- CredentialsId - Jenkins Credentials에서 만든 ID를 의미합니다. 즉 깃 허브에 로그인할 수 있는 식별 값입니다.
- 필자는 처음 단계에서 Credentials을 만들었습니다. 상단에 내용 있음
stage('Prepare') {
steps {
sh 'echo "Clonning Repository"'
git branch: 'dev',
url: 'https://github.com/kdg0209/example.git',
credentialsId: 'Git-Hub'
}
post {
success {
sh 'echo "Successfully Cloned Repository"'
}
failure {
sh 'echo "Fail Cloned Repository"'
}
}
}
💡 Bulid Gradle stage 설정
- 깃 허브에서 가져온 프로젝트로 빌드를 합니다.
stage('Bulid Gradle') {
steps {
sh 'echo "Bulid Gradle Start"'
dir('.') {
sh """
./gradlew clean build --exclude-task test
"""
}
}
post {
failure {
sh 'echo "Bulid Gradle Fail"'
}
}
}
💡 Bulid Docker stage 설정
- docker image를 만들기 위하여 빌드를 합니다.
stage('Bulid Docker') {
steps {
sh 'echo " Image Bulid Start"'
script {
DOCKER_IMAGE = docker.build DOCKER_IMAGE_NAME
}
}
post {
failure {
sh 'echo "Bulid Docker Fail"'
}
}
}
💡 Push Docker stage 설정
- 빌드한 이미지를 가지고 도커허브에 푸시를 합니다.
- docker.withRegistry()를 사용하여 Docker Hub에 로그인을 하며 로그인 성공시 빌드한 이미지를 푸시합니다.
- Docker-Hub는 Jenkins Credentials에서 만든 ID를 의미합니다. 즉 도커 허브에 로그인할 수 있는 식별 값입니다.
- 필자는 처음 단계에서 Credentials을 만들었습니다. 상단에 내용 있음
- success 는 성공적으로 되었다면 사용하지 않는 도커 이미지를 삭제합니다. 삭제하는 이유는 쓰레기 이미지가 생기므로 용량을 차지하게 됩니다.
stage('Push Docker') {
steps {
sh 'echo "Docker Image Push Start"'
script {
docker.withRegistry('https://registry.hub.docker.com', "Docker-Hub") {
DOCKER_IMAGE.push("latest")
}
}
}
post {
success {
sh 'docker rmi $(docker images -q -f dangling=true)'
}
failure {
error 'This Image Push Fail'
}
}
}
💡 Remote Server Docker Pull stage 설정
- 이미지를 도커 허브에 푸시를 했으므로 원격지 서버에서는 해당 이미지를 다운 받고 실행하합니다.
- Publish Over SSH를 사용하므로 대시보드 > 젠킨스 관리 > 시스템 설정에 설정한 SSH Server의 Name을 사용합니다.
- 자세한 방법은 위쪽 링크에 들어가셔서 15.Publish Over SSH 설정을 검색한 뒤 참고하시면 됩니다.
stage('Remote Server Docker Pull') {
steps([$class: 'BapSshPromotionPublisherPlugin']) {
sh 'echo "Remote Server Docker Pull Start"'
sshPublisher(
continueOnError: false, failOnError: true,
publishers: [
sshPublisherDesc(
configName: "remote-server",
verbose: true,
transfers: [
sshTransfer(
execCommand: "sh /home/scripts/spring-container.sh"
)
]
)
]
)
}
post {
success {
sh 'echo "Completed Remote Server Docker Pull"'
}
failure {
sh 'echo "Fail Remote Server Docker Pull"'
}
}
}
💡 원격지 서버에서 spring-container.sh 파일 생성
- 기존에 실행중인 컨테이너를 중지하고 삭제 후 다시 도커 허브에서 다운 받는 형태입니다.
#!/bin/sh
sudo docker rmi -f kdg0209/example || true
sudo docker stop spring-container || true
sudo docker rm -f spring-container || true
sudo docker run -d -p 8080:8080 --name spring-container -e USE_PROFILE=dev kdg0209/example
💡 빌드 실행 결과
728x90
반응형
'CI&CD' 카테고리의 다른 글
Docker - Unauthorized: incorrect username or password (0) | 2022.05.09 |
---|---|
Docker - dial unix /var/run/docker.sock: connect: permission denied 오류 해결 방법 (0) | 2022.05.09 |
Docker - docker open permission denied (0) | 2022.05.09 |
Docker - Mysql ssh로 외부 접근 하는 방법 (0) | 2022.03.14 |
Docker - Docker Network에 대한 이해 (2) | 2022.03.12 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- microkernel architecture
- java ThreadLocal
- service based architecture
- transactional outbox pattern
- spring boot excel download oom
- redis 대기열 구현
- transactional outbox pattern spring boot
- spring boot redisson destributed lock
- java userThread와 DaemonThread
- spring boot redisson sorted set
- redis sorted set
- 공간 기반 아키텍처
- redis sorted set으로 대기열 구현
- spring boot 엑셀 다운로드
- space based architecture
- 트랜잭셔널 아웃박스 패턴 스프링부트
- JDK Dynamic Proxy와 CGLIB의 차이
- spring boot excel download paging
- polling publisher spring boot
- 트랜잭셔널 아웃박스 패턴 스프링 부트 예제
- @ControllerAdvice
- 서비스 기반 아키텍처
- 레이어드 아키텍처란
- spring boot redisson 분산락 구현
- 자바 백엔드 개발자 추천 도서
- spring boot redis 대기열 구현
- pipe and filter architecture
- pipeline architecture
- 람다 표현식
- spring boot poi excel download
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함