⚓ 쿠버네티스 어나더 클래스 (지상편) - Spring 1, 2 을 듣고 작성하는 복습 블로그 입니다.
(1) 젠킨스 파이프라인 기본 구성 및 배포 세분화
Step 1. Jenkins Pipeline 기본 구성 만들기
1-1. 새로운 item 만들기

- item name 입력 및 Pipeline 선택
1-2. Pipeline Script
pipeline {
agent any
tools {
gradle 'gradle-7.6.1'
jdk 'jdk-17'
}
environment {
DOCKERHUB_USERNAME = "soyeon207"
GITHUB_USERNAME = "soyeon207"
// 아래 부분 수정(x)
GITHUB_URL = "https://github.com/${GITHUB_USERNAME}/kubernetes-anotherclass-sprint2.git"
CLASS_NUM = '2211'
}
stages {
stage('Source Build') {
steps {
// 소스파일 체크아웃 (Source 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"
}
}
}
}
1-3. [지금 빌드] 실행 후 Stage View 결과 확인

1-4. Jenkins Pipeline 구조 이해

- stage 가 각각의 파이프라인
- agent any
- 컨테이너 실행, Dockerfile 빌드, Yaml 배포 를 할 수 있는데 각각 Agent 형태로 제공
- 이 파이프라인에 어떤 Agent 를 넣어도 된다라고 설정

- 위와 같은 형식은 젠킨스를 master, slave 로 나눠서 설치했을 때 slave 에서 스크립트를 돌리겠다는 의미
- 한 번에 여러 script 를 돌릴려고 할 때 node 를 분산시키기 위해서 사용
Step 2. Github 연결 및 파이프라인 세분화
2-1. item name 입력 및 Pipeline 선택

2-2. Pipeline 설정
General > GitHub project

Advanced Project Options > Pipeline

- SCM : Source Code Management

- Path : 2212 : 2212 폴더를 사용
- 2212/Jenkinsfile : 2212 폴더의 Jenkinsfile 파일을 사용
2-3. 지금 빌드 실행

ERROR: [파라미터와 함께 빌드]에 GITHUB_USERNAME를 본인의 username으로 입력해 주세요! 매번 입력이 번거롭다면 Jenkinsfile에서 parameters에 입력 항목을 삭제 하시고 environment에 전역값을 넣은 후 해당 조건문은 삭제해 주세요. Finished: FAILURE
https://github.com/soyeon207/kubernetes-anotherclass-sprint2/blob/main/2212/Jenkinsfile
kubernetes-anotherclass-sprint2/2212/Jenkinsfile at main · soyeon207/kubernetes-anotherclass-sprint2
[⚓쿠버네티스 어나더 클래스 (지상편) - 📗Sprint2]. Contribute to soyeon207/kubernetes-anotherclass-sprint2 development by creating an account on GitHub.
github.com

→ Jenkinsfile 에서 Username 확인 stage 에서 DOCKERHUB_USERNAME 이나 GITHUB_USERNAME가 없으면 에러 발생하도록 되어 있음
2-4. 파라미터와 함께 빌드


Step 3. Blue/Green 배포 만들기 및 특징 실습
3-1. item name 입력 및 Pipeline 선택
- item name : 2213-jenkins_pipeline-step3
- Copy from : 2212-jenkins_pipeline-step2
3-2. Additional Behaviours 및 Script Path 수정

3-3. 앱 빌드

Blue 배포 시 [App Version] : Api Tester v1.0.0
배포 시작에 마우스를 올리면 수동배포 시작 가능

쿠버네티스 Green 배포가 완료되면 새로운 파드가 뜨고 V2 Service 호출 가능
Green 전환 → 트래픽이 바로 v2.0.0 으로 변경

모니터링 후 롤백버튼으로 v1 으로 변경 가능
4. Blue/Green 자동 배포 script 만들기
4-1. item name 입력 및 Pipeline 선택
- item name : 2213-jenkins_pipeline-step4
- Copy from : 2212-jenkins_pipeline-step3
4-2. Additional Behaviours 및 Script Path 수정

- 2214
- 2214/Jenkinsfile
4-3. 자동배포 시작

- Pod 가 Ready 상태가 되면 트래픽이 전환된다
(2) Blue/Green 배포시 고려해야할 요소

- Blue-Green 배포를 고려한 Deployment 네이밍 필요
- Blue-Green 배포를 위한 추가 레이블 및 셀렉터 필요

- Green Deployment 생성
- 테스트를 위한 Service 생성
- 새 서비스는 Green Pod 에 연결되도록 설정
- Service 의 Selector (blue-green-no) 를 2로 변경하여 트래픽을 Green 으로 전환
- Selector 가 변경되면 트래픽이 전환된다
- Green 배포가 문제가 없다고 판단되면 → 3
- Blue Deployment, Green Service 삭제 및 관련 모든 리소스의 레이블 정보 변경 (version)
- 공통 리소스에도 버전 정보 변경
- 모든 리소스를 챙기기엔 어려움 → Helm 사용
- Rollback
- blue-green-no 를 변경해주면 된다
stage('쿠버네티스 Blue배포') {
steps {
sh "kubectl apply -f ./${CLASS_NUM}/deploy/k8s/blue/namespace.yaml"
sh "kubectl apply -f ./${CLASS_NUM}/deploy/k8s/blue/configmap.yaml"
sh "kubectl apply -f ./${CLASS_NUM}/deploy/k8s/blue/secret.yaml"
sh "kubectl apply -f ./${CLASS_NUM}/deploy/k8s/blue/service.yaml"
sh "kubectl apply -f ./${CLASS_NUM}/deploy/k8s/blue/deployment.yaml"
}
}
- 쿠버네티스에 Blue 배포를 설정해 놓는 부분
- apply 로 리소스 생성
- create 도 있지만 create 는 명령어를 날리고 기존에 리소스가 있으면 실패를 한다
- apply 는 있으면 업데이트
stage('배포 시작') {
steps {
input message: '수동배포 시작', ok: "Yes"
}
}
- 수동 배포를 할 지 메세지 박스를 만드는 코드
- 다음스텝으로 넘어가는 역할
stage('전환여부 확인') {
steps {
script {
returnValue = input message: 'Green 전환?', ok: "Yes", parameters: [booleanParam(defaultValue: true, name: 'IS_SWITCHED')]
if (returnValue) {
sh "kubectl patch -n anotherclass-221 svc api-tester -p '{\"spec\": {\"selector\": {\"blue-green-no\": \"2\"}}}'"
}
}
}
}
- patch 는 수정하라는 명령어
- -p 속성을 줘서 특정 속성만 변경해야할 때 사용
이미지 출처 URL : https://inf.run/k7mF
'🌱 인프런 > ⚓ 쿠버네티스 어나더 클래스 (지상편)' 카테고리의 다른 글
| [미션5] 컨테이너 이미지 사례 실습 (1) | 2025.06.16 |
|---|---|
| (13) Helm 과 Kustomize - 1 (Helm vs Kustomize, Helm 배포) (1) | 2025.06.15 |
| (11) 배포를 시작하기 전에 반드시 알아야 할 것들 (2) | 2025.06.11 |
| (10) 손쉽게 데브옵스 환경을 구축하는 방법 (2) | 2025.06.10 |
| (9) 데브옵스 한방 정리 (8) | 2025.06.09 |