젠킨스(Jenkins)는 오픈소스 CI/CD(지속적 통합·지속적 배포) 자동화 서버로, 개발자가 소스 코드를 변경하면 빌드·테스트·배포 과정을 자동으로 실행해 주는 도구이다.
| 개념 | 설명 |
|---|---|
| CI (Continuous Integration) | 코드 변경 사항을 자주 통합하고, 자동으로 빌드 및 테스트하여 문제를 빠르게 발견 |
| CD (Continuous Delivery/Deployment) | 검증된 코드를 자동으로 배포까지 이어가는 프로세스 |
| 파이프라인(Pipeline) | 빌드 → 테스트 → 배포 단계를 정의한 자동화 워크플로 |
| 노드(Node) | 작업을 수행하는 서버(마스터·에이전트 포함) |
| 에이전트(Agent) | 실제 빌드나 테스트를 실행하는 실행 환경 |
| 플러그인(Plugin) | Git, Docker, Kubernetes, Slack 등과의 연동을 확장하는 모듈 |
CI/CD는 소프트웨어 개발과 배포 과정을 자동화하고 품질을 높이기 위한 핵심 DevOps 실천 방법이다.
| 용어 | 풀네임 | 핵심 개념 |
|---|---|---|
| CI | Continuous Integration | 개발자가 자주(하루에도 여러 번) 코드를 통합하고 자동으로 빌드·테스트하여 문제를 조기 발견 |
| CD | Continuous Delivery / Continuous Deployment | CI 결과를 기반으로, 운영 환경까지 자동으로 전달·배포하는 단계 |
[개발자가 코드 변경]
↓
[버전 관리 시스템(Git)에 푸시]
↓
[CI 서버(Jenkins, GitLab CI 등) 자동 빌드 & 테스트]
↓
[CD 단계: 스테이징 → 운영 환경 배포]
| 구분 | Continuous Delivery | Continuous Deployment |
|---|---|---|
| 배포 자동화 범위 | 운영 직전(스테이징까지) | 운영까지 전부 자동 |
| 운영 배포 트리거 | 사람이 승인 후 실행 | 코드 통합 후 자동 |
| 장점 | 안정성·통제력 높음 | 완전 자동화, 릴리즈 속도 최상 |
| 사용 예 | 금융권, 보수적인 조직 | 스타트업, SaaS 서비스 |
1. Git Push
2. 빌드 (Maven, Gradle, npm 등)
3. 단위 테스트
4. 코드 품질 검사 (SonarQube)
5. Docker 이미지 생성
6. 이미지 레지스트리에 푸시 (Harbor, ECR 등)
7. 스테이징 환경 배포
8. 운영 환경 배포 (승인 또는 자동)
데이터 파이프라인·CI/CD 환경에서 젠킨스를 쿠버네티스에서 운영하면, 전통적인 VM/온프레 설치 방식 대비 자동 확장, 컨테이너 기반 빌드, 배포·업데이트 자동화, 고가용성의 장점이 생긴다. 특히 Spark·Kafka·MinIO 같이 컨테이너로 운영하는 데이터 플랫폼과 함께 쓰면, 네트워크·스토리지·보안 측면에서 시너지가 크다.
| 항목 | 온프레 VM 기반 Jenkins | 쿠버네티스 기반 Jenkins |
|---|---|---|
| 설치/업데이트 | 수동 설치, 수동 버전 업그레이드 필요 | Helm Chart, Operator로 설치·업데이트 자동화 |
| 빌드 에이전트 확장 | 고정된 빌드 서버 수, 확장시 수동 증설 | 빌드 요청 시 Pod 자동 생성·삭제 (Auto-scaling) |
| 리소스 활용 효율 | 유휴 서버 리소스 낭비 | Job 끝나면 Pod 제거 → 리소스 회수 |
| 빌드 환경 다양성 | 에이전트 OS/패키지 직접 설치 필요 | Job마다 다른 빌드 이미지 사용 가능 (Java, Python, Spark 등) |
| 스토리지 관리 | 로컬 디스크 또는 NFS 기반, 마이그레이션 번거로움 | PVC + S3/MinIO 연동으로 유연한 저장소 사용 |
| 배포 자동화 연계 | 외부 스크립트, SSH, API 호출 필요 | ArgoCD/Tekton 등 GitOps 툴과 네이티브 연동 |
| 장애 복구 | 서버 장애 시 수동 복구 | StatefulSet + PV로 자동 재배포 및 데이터 보존 |
| 네트워크 성능 | 외부 서비스 접근 시 방화벽/라우팅 필요 | Spark, Kafka, MinIO 등 내부 서비스와 저지연 통신 |
| 운영 비용 | 서버별 라이프사이클 관리, 고정 자원 유지비 발생 | 필요 시만 리소스 사용 → 비용 절감 가능 |
| 보안 및 격리 | 같은 서버에서 Job 간 환경 오염 가능성 | 컨테이너 격리로 Job 환경 독립 보장 |
아래는 쿠버네티스 Jenkins HA 배포 전 점검 해야할 항목들이다.
| 구분 | 점검 항목 | ||
|---|---|---|---|
| 아키텍처 설계 | Jenkins 마스터를 StatefulSet으로 구성 | ||
JENKINS_HOME이 PV에 마운트됨 | |||
| 빌드 에이전트 Pod Template 설정 완료 | |||
| 운영/테스트/개발 Namespace 분리 | |||
| 스토리지 & 백업 | StorageClass와 PVC 정책 검증 완료 | ||
| Jenkins 설정/플러그인/Job 데이터 백업 자동화 구성 | |||
| PVC 스냅샷 또는 S3/MinIO 백업 정책 적용 | |||
| 빌드 아티팩트용 별도 버킷 구성 | |||
| 네트워크 & 보안 | Ingress + HTTPS 적용 | ||
| 내부 서비스 접근은 K8s Service로만 허용 | |||
| RBAC 최소 권한 부여 | |||
| Jenkins Secret을 K8s Secret 또는 Vault로 관리 | |||
| 에이전트 운영 | Job별 빌드 이미지 지정 가능 | ||
| 빌드 완료 후 에이전트 Pod 자동 삭제 확인 | |||
| Kaniko/Buildah/BuildKit 등 빌드 툴 포함 이미지 준비 | |||
| GPU/특수 노드 라벨링 설정 완료 | |||
| 모니터링 & 로깅 | Prometheus + Grafana 메트릭 수집 구성 | ||
| 빌드 상태/큐 길이/실패율 대시보드 생성 | |||
| Jenkins 로그 중앙집중 관리(Loki/ELK) 구성 | |||
| 고가용성 & 장애 대응 | HPA로 에이전트 자동 확장 | ||
| PodDisruptionBudget 적용 | |||
| 마스터 장애 시 자동 재배포 테스트 완료 | |||
| DR 시나리오 문서화 | |||
| CI/CD 연계 | Git webhook → Jenkins 빌드 → ArgoCD 연동 테스트 완료 | ||
| 빌드 캐시를 S3/MinIO로 공유하도록 구성 |
Jenkins가 배포·스케줄링·검증·운영까지 전부 오케스트레이션한다. Kafka, Spark, Iceberg, MinIO, Trino 같은 오픈소스 조합에서 Jenkins가 “Glue” 역할을 한다.
Kafka → Spark → Iceberg로 가는 처리 코드를 자동으로 빌드·배포한다.
코드 배포
- Spark/Flink/Trino 쿼리나 ETL 스크립트를 Git에서 받아 빌드 후 Docker 이미지 생성
- Kubernetes나 YARN(있다면)에 Job 제출
자동 테스트
[Git Commit] → [Jenkins Build Spark JAR] → [Push to Harbor] → [kubectl spark-submit] → [Iceberg 테이블 업데이트]
Kafka에 들어온 스트리밍 데이터를 주기적으로 Iceberg에 적재하거나 최적화하는 작업을 스케줄링한다.
배치 적재
예를 들어, 매 1시간마다 Kafka Topic → Spark Batch → Iceberg Append
데이터 유지관리
- Iceberg VACUUM 또는 OPTIMIZE 명령 주기적 실행
- 스냅샷 삭제, 파티션 재작성(Compaction) 같은 작업을 Jenkins Job으로 등록
“NULL 값 없음, ID 중복 없음” 검사 실패 시 Jenkins 파이프라인 중단
Lakehouse 구성 요소(Kafka, Spark, MinIO, Hive Metastore 등) 환경 자체를 관리한다.
데이터 파이프라인 실행 결과를 모니터링하고, 문제 시 알림을 보낸다.