Devops/Jenkins

[Jenkins] 젠킨스(Jenkins)란? 역사와 등장 배경, 구조와 활용 방법

일요일좋아하는사람 2025. 4. 19. 23:12
728x90
반응형

Jenkins

✨ 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
반응형