
🎯 Jenkins에 대해 정리합니다.

Java로 개발된 오픈 소스 자동화 서버로 주로 지속적 인도(Continuous Delivery, CD) 프로세스를 구축할 때 사용되며, 높은 유연성과 확장성 덕분에 널리 활용되고 있습니다.
원래는 Hudson이라는 오픈소스 도구였는데, 오라클이 Hudson을 인수하고 독점 소프트웨어로 전환하기로 하자, 커뮤니티는 Jenkins라는 이름으로 오픈 소스로 분리하여 나와 현재까지 오픈소스 솔루션으로 개발을 지속하고 있습니다.
🤔 CI/CD란?
CI/CD는 소프트웨어 개발에서 빌드(Build), 테스트(Test), 배포(Deploy)의 과정을 자동화하는 대표적인 방식입니다.
CI (지속적 통합, Continuous Integration)
- 여러 개발자가 작성한 코드를 하나의 저장소에 자주 통합하는 것으로 시작됩니다.
- 통합된 코드는 자동으로 빌드되고, 단위 테스트와 정적 분석 등을 통해 문제가 없는지 확인합니다.
- 이를 통해 언제든지 배포 가능한 상태를 유지하는 것이 목표입니다.
CD (지속적 배포, Continuous Delivery / Deployment)
CI 과정을 거쳐 검증된 애플리케이션을 운영 환경까지 안정적으로 배포하는 단계를 자동화합니다.
지속적 전달(Continuous Delivery)은 배포 직전 단계까지 자동화하고, 실제 배포 여부는 사람이 결정합니다.
지속적 배포(Continuous Deployment)는 승인 없이 운영 환경까지 자동으로 배포됩니다.
이 과정에서는 컨테이너 이미지 생성과 Kubernetes 리소스(Pod, Deployment, Service 등)를 이용한 자동 배포가 이루어집니다.
다양한 프로그래밍 언어 지원 : Java, Python, Go, Node.js 등 거의 모든 프로그래밍 언어에 대응합니다.
플러그인을 통한 확장 : 수천 개의 플러그인이 존재하며, 사용자가 직접 플러그인을 만들어 기능을 추가할 수도 있습니다.
이식성 : 로컬 서버뿐 아니라 클라우드, 컨테이너, Kubernetes 클러스터 환경에서도 유연하게 작동합니다.
대부분의 소스 관리 시스템 지원 : Git, Subversion 등 주요 VCS 시스템 대부분을 지원합니다.
분산 처리 지원 : 마스터-슬레이브 구조를 통해 여러 노드에서 병렬 작업이 가능합니다.
코드로 파이프라인 구성 : Jenkinsfile을 사용하여 파이프라인을 코드로 선언하고 버전 관리할 수 있습니다.
Jenkins는 마스터(Master)와 슬레이브(Slave)로 구성된 분산 아키텍처를 가지고 있습니다.
마스터의 역할
빌드 트리거(예: Git 커밋) 감지
클라이언트 요청을 처리 (Web UI, HTTP API)
에이전트에게 작업 분배 및 우선순위 조정
전체 빌드 환경을 관리
에이전트의 역할
마스터의 명령을 받아 실제 빌드, 테스트, 배포 등의 작업을 실행
자원을 분산시켜 병렬 처리 가능
조직이 커짐에 따라 Jenkins를 어떻게 확장할지도 중요한 고려 사항입니다.
팀 단위로 마스터 인스턴스를 여러 개 운영하는 방식입니다.
각 팀이 독립된 Jenkins 환경을 가지므로 충돌이 줄어들고, 팀 간 업무 효율성이 증가합니다.
특정 마스터에 문제가 생겨도 다른 팀에는 영향을 주지 않기 때문에 안정성이 뛰어납니다.
통합 자동화가 복잡해진다는 단점이 있습니다.
🤔 수직 확장은 어떨까?
- 하나의 마스터에 더 많은 CPU, RAM 등 자원을 추가하는 방식입니다.
- 하지만 하나의 마스터에 모든 업무를 몰아주면 유지보수와 장애 대응이 복잡해질 수 있습니다.
Jenkins 인스턴스는 항상 테스트용 인스턴스와 프로덕션용으로 분리 운용해야 합니다.
테스트 인스턴스 : 새로운 플러그인 설치, Jenkins 업데이트, 파이프라인 변경 사항을 먼저 실험하는 인스턴스입니다.
프로덕션 인스턴스 : 실제 코드 빌드와 배포가 이루어지는 인스턴스입니다.
특히 운영팀은 다음 변경 사항에 대해 반드시 테스트 후 프로덕션에 반영해야 합니다.
Jenkins 소프트웨어의 업데이트
신규 플러그인 적용
CI/CD 파이프라인의 변경 및 유지보수
Jenkins를 운영하려면 서버가 필요한데, 요즘은 이 서버 역할을 Kubernetes가 대신해줍니다.
Jenkins를 클러스터에 올릴 때 Helm으로 설치하면 아주 간편하기 때문에 Helm을 사용합니다.

Helm은 Kubernetes의 다양한 리소스를 패키지처럼 묶어 관리할 수 있도록 도와주는 대표적인 Kubernetes용 패키지 매니저입니다.
마치 Ubuntu의 apt나 RedHat의 yum처럼, Helm은 Kubernetes용으로 최적화된 설치/업데이트 도구입니다.
패키지 검색
패키지 관리
패키지 의존성 관리
패키지 보안 관리
Jenkins를 따로 설치하지 않고 클러스터 위에서 운영할 수 있다는 개념이 신기했습니다. Helm으로 쉽게 설치할 수 있다는 점도 놀라웠지만, 그만큼 다양한 도구를 익혀야 한다는 현실이 쉽지만은 않다는 걸 느꼈습니다.
