Devops/Jenkins
[Jenkins] 젠킨스(Jenkins)란? 역사와 등장 배경, 구조와 활용 방법
일요일좋아하는사람
2025. 4. 19. 23:12
728x90
반응형
✨ 1. 들어가며: Jenkins란 무엇인가?
Jenkins는 전 세계적으로 가장 널리 사용되는 오픈 소스 자동화 서버로, 소프트웨어 개발 파이프라인의 지속적인 통합(Continuous Integration, CI) 및 지속적인 배포(Continuous Delivery, CD)를 구현하는 데 사용됩니다. Java로 작성되어 플랫폼 독립적으로 작동하며, 플러그인 기반의 유연한 구조 덕분에 거의 모든 개발 환경과 통합할 수 있습니다.
Jenkins의 핵심 가치는 "개발자의 수동 반복 작업을 줄이고, 자동화된 퀄리티 게이트를 통해 소프트웨어의 품질을 지속적으로 확보한다"는 데에 있습니다. 이 문서에서는 Jenkins의 역사적 기원부터 사용 목적, 아키텍처, 플러그인 구조, 동작 원리, 현대 DevOps 생태계에서의 위치까지 상세히 탐구합니다.
🏛️ 2. 역사: Jenkins의 탄생과 성장
2.1 시작: Hudson의 등장
- Jenkins의 전신은 Hudson이라는 이름으로 시작됨
- 2004~2005년 무렵, Sun Microsystems의 개발자인 Kohsuke Kawaguchi가 사내의 반복적인 빌드 문제를 해결하기 위해 만든 도구
- 당시 개발팀은 소스 변경 시 수동 테스트와 배포 과정으로 인해 자주 문제를 겪었고, 이를 자동화하기 위한 사내 툴로 Hudson이 개발됨
2.2 Hudson → Jenkins: 오픈소스 커뮤니티의 분기
- 2009년 Sun이 Oracle에 인수되며, Hudson 프로젝트도 Oracle 소유로 이전
- 이후 Oracle과 커뮤니티 간의 갈등이 시작됨 (특히 상표권과 거버넌스 문제)
- 2011년 초, 커뮤니티의 주도 아래 Jenkins라는 새로운 프로젝트로 공식 포크됨
- 이후 Jenkins는 독립적인 프로젝트로 커뮤니티 중심의 발전을 이어감
2.3 Jenkins의 도약
- GitHub, GitLab, Docker 등의 오픈소스와의 연동이 쉬워지면서 Jenkins는 CI/CD 도구로 각광받음
- CloudBees의 상용 지원이 붙으며 엔터프라이즈 환경으로 확장됨
- Jenkins 2.0 이후, Pipeline-as-Code (Jenkinsfile) 도입으로 새로운 전환점 도달
- Kubernetes, AWS, Azure, GCP 등과의 통합도 강화됨
2.4 Jenkins의 현재 위치
- CNCF 생태계에 속하진 않지만 여전히 DevOps 자동화의 핵심 엔진
- GitOps 기반 DevOps의 중심 역할로 확장 중
- Jenkins X, Jenkinsfile Runner, Blue Ocean UI 등 다양한 분기 기술 존재
🧱 3. Jenkins 아키텍처 구조
3.1 Master-Agent 구조 (이후 Controller-Agent)
- Jenkins는 기본적으로 Master(Controller)와 Agent(Node) 구조로 설계됨
- Master/Controller: 웹 UI 제공, 빌드 스케줄링, 빌드 결과 저장, 로그 관리
- Agent: 실제 빌드 수행 (ex. 테스트 실행, 앱 컴파일 등)
- 분산 빌드 환경을 구성하여 하나의 Jenkins가 여러 시스템의 리소스를 활용 가능
3.2 Executor
- Agent는 하나 이상의 Executor 슬롯을 가짐
- 하나의 Executor는 하나의 Job을 실행
3.3 Label (노드 분류)
- Agent마다 특정 Label 부여 가능 (예: ubuntu, docker, gpu)
- 특정 Job은 label: docker 와 같이 해당 환경에서만 실행되도록 설정 가능
3.4 SCM Polling vs Webhook
- Jenkins는 Git, SVN, Mercurial 등 다양한 SCM과 통합 가능
- Pull 방식(SCM polling) 또는 Push 방식(webhook) 모두 지원
🧩 4. Jenkinsfile & 파이프라인 DSL
4.1 Pipeline-as-Code
- Jenkinsfile을 통해 파이프라인을 코드로 정의
- Git 레포지토리에 Jenkinsfile을 저장하여 변경 이력 추적 가능
4.2 Declarative vs Scripted Pipeline
- Declarative: YAML처럼 간단한 구조, 권장 방식
- Scripted: Groovy 기반 복잡한 로직 표현 가능
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Building...'
}
}
stage('Test') {
steps {
sh 'pytest'
}
}
}
}
🖥️ 5. Jenkins 인터페이스: UI, CLI, REST API
5.1 Web UI
- 가장 기본적인 관리 수단
- Job 생성, 빌드 확인, 로그 모니터링 등
5.2 Jenkins CLI
- java -jar jenkins-cli.jar -s http://jenkins/ ...
- 빌드 트리거, Job 삭제, 사용자 관리 가능
5.3 REST API
- curl http://jenkins/job/myjob/api/json
- 다양한 형식 지원: XML, JSON, Python
- 토큰 기반 인증 필요
🔐 6. Jenkins 보안 구조 및 권한 관리
6.1 Security Realm
- Jenkins 자체 사용자 관리, LDAP, Active Directory, GitHub 인증 등
6.2 Authorization 전략
- Matrix-based: 사용자/그룹별 세분화된 권한 설정
- Project-based: Job 단위 접근 제어
- Role-based Authorization Plugin 사용 가능
6.3 Credentials 관리
- UI에서 비밀번호, SSH 키, API Key 등 관리 가능
- Jenkinsfile에서 withCredentials 블록으로 사용 가능
🧩 7. 플러그인 생태계
7.1 플러그인 중심 구조
- Jenkins의 가장 큰 강점: 1800개 이상의 공식 플러그인
- UI, SCM, 빌드 도구, 클라우드, 메시징, 테스트, 보안 등
7.2 대표 플러그인
- Git Plugin
- Docker Plugin
- Slack Notification
- Blue Ocean
- Matrix Authorization Strategy
- Pipeline Utility Steps
- Kubernetes Plugin
7.3 설치 및 관리
- Jenkins UI > Manage Plugins > Available 탭
- jenkins.io에서 업데이트 센터 동기화
☁️ 8. 클라우드 및 멀티 플랫폼 연동
8.1 Kubernetes 연동
- Jenkins Kubernetes Plugin 사용
- PodTemplate 기반으로 빌드 환경 생성 (on-demand)
- Jenkins master는 Kubernetes에 배포 가능 (Helm chart 제공)
8.2 Docker 연동
- Docker Agent 활용
- 파이프라인 내 agent { docker { image "python:3.9" } } 처럼 정의
8.3 AWS, GCP, Azure 통합
- CloudBees AWS Plugin, Azure VM Plugin 등 활용
- EC2 Auto Scaling, S3 백업, Secrets Manager 연동
🔁 9. 운영 전략 및 확장성 관리
9.1 백업 및 복원
- Jenkins 홈 디렉토리(/var/lib/jenkins) 백업
- Job DSL, Jenkinsfile은 Git에 보관 권장
9.2 HA (High Availability)
- Jenkins 자체는 단일 프로세스 기반
- HA Proxy, Active-Passive 구성으로 부하 분산
9.3 모니터링
- Prometheus Plugin 사용하여 메트릭 수집
- Grafana 연동 가능
🧪 10. 상태 관리와 로깅
10.1 Job 실행 기록
- 모든 Job은 로그와 메타데이터 저장
- XML 파일로 Job 정의 관리 가능
10.2 시스템 로그
- Jenkins 로그: /var/log/jenkins/jenkins.log
- 웹 UI에서도 조회 가능
10.3 사용자 행동 로그
- Audit Trail Plugin으로 관리자/사용자 작업 기록
🌐 11. Jenkins의 미래: Jenkins X와 클라우드 네이티브 시대
11.1 Jenkins X
- Kubernetes 기반 DevOps 파이프라인
- Tekton 기반 빌드 엔진 사용
- GitOps 구조로 배포 구성
11.2 Blue Ocean UI
- 현대적인 UX
- 파이프라인 시각화, 단계별 실패 지점 파악 용이
11.3 Jenkinsfile Runner
- Jenkins 없이 Jenkinsfile 실행 가능
- CI/CD 파이프라인을 독립적으로 테스트하는 용도
728x90
반응형