[Docker] Jenkins로 도커에 배포하기

Posted by 김성철

Docker - Jenkins 로 도커에 배포하기

Jenkins와 도커가 설치되어 있다면 아래의 스크립트로 바로 컨테이너 환경을 구성할수 있음  
git credentialsId 부분만 설정해주면 됨  

dockerfile

해당 도커파일은 배포하려는 project 에 포함되어있어야 함  
  
경로 : https://github.com/kkimsungchul/stock/blob/master/Dockerfile  
  
======================================================================================================  
FROM openjdk:8-jdk-alpine  
ARG JAR_FILE=stock-0.0.1-SNAPSHOT.jar  
COPY ${JAR_FILE} myboot.jar  
ENTRYPOINT ["java","-jar","/myboot.jar"]  
  
======================================================================================================  

pipeline script

- stages 설명  
	Checkout : git에서 소스를 내려받음  
	build : 내려받은 소스를 빌드함  
	jar_move : 빌드한 jar 파일을 상위 디렉토리로 이동  
	docker_stop : 실행중인 컨테이너를 중지  
	docker_delete : 도커 이미지 파일 삭제  
	docker_build : 도커 이미지 빌드  
	images_check : 도커 이미지 생성 확인  
	docker_run : 컨테이너 실행  
		※ 컨테이너 실행 시 -it 명령어 사용하면 오류가 발생하므로 -i 만 사용  
  
- catchError 설명  
	steps 을 진행하다가 오류가 발생하면, 젠킨스의 파이프라인 스크립트는 그뒤로 실행을 하지 않음  
	catchError를 넣으면 오류가 발생할 경우 stage에는 FAILURE로 표시하고서 그 다음단계를 진행함  
  
======================================================================================================  
pipeline {  
	agent any  
  
	stages {  
		stage('Checkout') {  
			steps {  
				git credentialsId: 'kimsc1218', url: 'https://github.com/kkimsungchul/stock.git', branch: 'master'  
			}  
		}  
		stage('build') {  
			steps {  
				bat './gradlew.bat clean build'  
			}  
		}  
		stage('jar_move') {  
			steps {  
  
				bat """  
				cd build/libs  
				move stock-0.0.1-SNAPSHOT.jar ..  
				cd ..  
				move stock-0.0.1-SNAPSHOT.jar ..  
				"""  
  
			}  
		}  
		stage('docker_stop') {  
			steps {  
				catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {  
  
					bat """  
					docker stop test  
					"""  
				}  
			}  
		}  
		stage('docker_delete') {  
			steps {  
				catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {  
					bat """  
					docker rmi stock  
					"""  
				}  
			}  
		}  
		stage('docker_build') {  
			steps {  
				bat """  
				docker build -t stock .  
				"""  
  
			}  
		}  
		stage('images_check') {  
			steps {  
				bat """  
				docker images  
				"""  
  
			}  
		}  
		stage('create_docker_network') {  
			steps {  
				catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {  
					bat """  
					docker network create springboot-mysql-net  
					"""  
				}  
			}  
		}  
		stage('docker_run') {  
			steps {  
				bat """  
				docker run --rm -i -d -p 9090:80 --network springboot-mysql-net --link mysql:mysql --name test stock  
				"""  
  
			}  
		}  
  
	}  
}  
======================================================================================================