CICD
Jenkins PipeLine으로 Docker Image 만들고 배포하기
웅둘
2023. 9. 18. 13:53
Jenkins 2.401.1 버전 기준으로 작성한 내용입니다.
Docker Hub Credential 만들기
- Docker Hub https://hub.docker.com/ 에 접속하여 도커 아이디를 만들어준다.
토큰 생성
- Account Settings → Security → New Access Tokens
- Access Token Description (원하는 이름 입력) → Generate
- Token 창을 끄면 다시 확인할 수 없음으로 Token을 복사해둔다.
Credential 만들기
1. Jenkins 대시보드 → Jenkins 관리 → Credentials → 아래의 gloabl 클릭 → Add credentials
2. New Credentials
- Kind → Username with password
- Username : Docker hub id
- Password : Docker hub Token
- ID : 원하는 이름 지정
Pipeline 생성
Docker pipeline 플러그인 설치
- Jenkins Dashboard → Jenkins 관리 → Plugins → Available Plugins
- Docker pipeline 검색 후 설치 → 설치가 끝나고 Jenkins 재시작
Jenkins Dashboard → 새로운 Item → 원하는 이름 입력 후 → Pipeline 생성
- Build Trigges → Build after other projects are build 선
- Project to watch → 파이프라인과 연결할 Project 입력
- Trigger only if build is stable 선택
연결된 프로젝트가 빌드가 될 경우에만 Pipline 프로젝트가 실행됩니다.
Script
pipeline {
environment {
repository = {docker hub id}/{repository 이름}
DOCKERHUB_CREDENTIALS = credentials({생성한 Docker hub Credentials})
}
agent any
stages {
stage('Building our image') {
steps {
script {
sh "cp {연결된 Project의 Workspace jar 파일 위치} {Workspace Pipeline 경로}" // jar 파일을 현재 위치로 복사
sh "cd {Workspace Pipeline 경로}" // 해당 경로로 이동
sh "docker build -f dockerfile . --tag $repository:latest" // 도커 이미지 빌드
}
}
}
stage('Login'){
steps{
sh 'echo $DOCKERHUB_CREDENTIALS_PSW | docker login -u $DOCKERHUB_CREDENTIALS_USR --password-stdin' // docker hub 로그인
}
}
stage('Deploy our image') {
steps {
script {
sh 'docker push $repository:latest' //docker push
}
}
}
stage('Container run') { // 도커 컨테이너 실행 (필요할 경우)
steps {
sh "cp {연결된 Project의 Workspace jar 파일 위치} {Workspace Pipeline 경로}" // 스크립트 파일을 현재 위치로 복사
sh "cd {Workspace Pipeline 경로}" // 해당 경로로 이동
sh "{실행할 스크립트 파일}"
}
}
stage('Cleaning up') {
steps {
sh "docker rmi $repository:$BUILD_NUMBER" // docker image 제거
}
}
}
}
Dockerfile
FROM openjdk:17
COPY ./server-1.0.jar .
ENTRYPOINT ["java","-jar","server-1.0.jar"]
- Dockerfile은 파이프라인 프로젝트가 있는 폴더에 있어야합니다.
실행
- 연결된 Project Job 실행 후 작업 완료 시 pipeline이 실행된다.