[쿠버네티스 어나더 클래스 (지상편) - Sprint 2] 12. Jenkins Pipeline (기초부터 Blue/Green까지Tech/Kubernetes(K8s)2025. 6. 12. 20:28
Table of Contents
* 본 게시물은 쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2 강의와 강의 자료를 바탕으로 작성되었습니다.
Jenkins에서 보기(분류) 생성하는 법
대시보드에서 + 버튼을 클릭

원하는 분류명을 지정 후, 생성

포함시키고 싶은 작업(Jenkins Jobs)를 선택하고 확인

이렇게 만들어진 보기는 대시보드에서 보기를 선택하여 Item을 만들면, 생성된 Item은 선택한 보기에 포함됨
Jenkins Pipeline 기본 구성 만들기

- 원하는 Repo의 Branch에 있는 소스파일을 가져옴
- 가져온 소스파일을 빌드하여 실행파일로 만듦
- 실행파일을 Docker Image로 빌드하기 위한 Dockerfile을 가져옴
- Dockerfile을 통해 실행파일을 이미지로 빌드하여 Docker Hub에 업로드
- 쿠버네티스에 배포 명령을 내려 Docker Hub에 올라간 이미지를 Container로 실행
Jenkins Pipeline Script 작성
새로운 Item > Pipeline
pipeline {
agent any
// Jenkins에서 정의된 Toos 지정
tools {
gradle 'gradle-7.6.1'
jdk 'jdk-17'
}
// 환경변수 설정
environment {
DOCKERHUB_USERNAME = "one393"
GITHUB_USERNAME = "ONE0x393"
GITHUB_URL = "https://github.com/${GITHUB_USERNAME}/kubernetes-anotherclass-sprint2.git"
CLASS_NUM = '2211'
}
stages {
stage('Source Build') {
steps {
// Build 진행 할 소스의 Repo와 브랜치를 지정
git branch: 'main', url: 'https://github.com/k8s-1pro/kubernetes-anotherclass-api-tester.git'
// 소스 빌드
// 755권한 필요 (윈도우에서 Git으로 소스 업로드시 권한은 644)
sh "chmod +x ./gradlew"
sh "gradle clean build"
}
}
stage('Container Build') {
steps {
// 릴리즈파일 체크아웃
checkout scmGit(branches: [[name: '*/main']],
extensions: [[$class: 'SparseCheckoutPaths',
sparseCheckoutPaths: [[path: "/${CLASS_NUM}"]]]],
userRemoteConfigs: [[url: "${GITHUB_URL}"]])
// jar 파일 복사
sh "cp ./build/libs/app-0.0.1-SNAPSHOT.jar ./${CLASS_NUM}/build/docker/app-0.0.1-SNAPSHOT.jar"
// 컨테이너 빌드 및 업로드
sh "docker build -t ${DOCKERHUB_USERNAME}/api-tester:v1.0.0 ./${CLASS_NUM}/build/docker"
// 영상과 달리 if문이 없어지고 항상 본인의 Docker Hub에서 빌드가 되도록 수정 됨
sh "docker push ${DOCKERHUB_USERNAME}/api-tester:v1.0.0"
}
}
stage('K8S Deploy') {
steps {
// 쿠버네티스 배포
sh "kubectl apply -f ./${CLASS_NUM}/deploy/k8s/namespace.yaml"
sh "kubectl apply -f ./${CLASS_NUM}/deploy/k8s/configmap.yaml"
sh "kubectl apply -f ./${CLASS_NUM}/deploy/k8s/secret.yaml"
sh "kubectl apply -f ./${CLASS_NUM}/deploy/k8s/service.yaml"
sh "kubectl apply -f ./${CLASS_NUM}/deploy/k8s/deployment.yaml"
}
}
}
}
- Jenkins Pipeline의 Script는 아래의 구조를 따른다.
pipeline{
agent any
stages{
stage("${현재 진행 단계}"){
steps{
// 실행할 스크립트를 삽입
}
}
stage("${현재 진행 단계}"){
steps{
// 실행할 스크립트를 삽입
}
}
}
}
- Pipeline을 빌드하게 되면, 아래와 같이 각 단계 별로 진행도를 가시적으로 확인할 수 있다.

Github 연결과 Pipeline 세분화
- Jenkins > 새로운 Item > Pipeline
- Github project > Project url (관련 프로젝트의 URL)

- Pipeline > Pipeline script from SCM(Software Configuration Management) > SCM (Git)

- Additional Behaviours

지정된 Repo의 2213 디렉터리의 내용만 가져오고, 2213 디렉터리의 Jenkinsfile을 Script로 사용하도록 지정
- 빌드 시, 똑같이 Jenkinsfile에 정의된 Stages에 따라 표시되는 것을 확인

Blue/Green 배포 만들기 및 특징

- Blue/Green 배포 시, Blue Green을 구분할 수 있는 식별자가 필요함
(예제에서는 'blue-green-no' 속성을 사용) - Green이 배포되면 Green에 연결된 Service를 통해 테스트를 진행할 수 있음
- 테스트가 완료되고 배포를 계속할 경우, Blue의 Deployment와 Green의 Service는 삭제되고 기존 Resources의 관련 정보는 모두 Green의 정보로 변경
- 트래픽이 Green으로 전환되고 다시 롤 백 할 경우, Service는 다시 Blue로 트래픽을 변경
Blue/Green 자동 배포
- 자동 배포하게 될 경우, 위의 과정 중 Green에 Service를 연결하여 따로 테스트를 하는 과정이 빠진다.
- 대신, Green의 Pod에서 Ready 상태를 지속적으로 확인하여 준비가 되었다고 판단될 때, Service가 Green을 가리키도록 한다.
- 트래픽이 Green으로 전환되고, Blue Deployment는 제거되고 관련 Resources의 정보는 Green의 정보로 변경된다.
'Tech > Kubernetes(K8s)' 카테고리의 다른 글
@ONE_ :: 정호원
잘못된 정보가 있다면 말씀해주세요!