내 잡다한 노트
젠킨스 Jenkins 본문
젠킨스(Jenkins)란?
젠킨스(Jenkins)는 오픈소스 자동화 서버로, 소프트웨어 개발의 빌드(Build), 테스트(Test), 배포(Deploy) 과정을 자동화하기 위해 사용됩니다. 특히 CI/CD(지속적 통합 및 지속적 배포)를 구현하는 데 매우 유용하며, DevOps 환경에서 중요한 역할을 합니다.
주요 기능
- 지속적 통합(CI)
코드가 변경될 때마다 자동으로 빌드와 테스트를 실행해 개발 주기를 단축하고 품질을 높입니다. - 지속적 배포(CD)
빌드가 성공하면 자동으로 애플리케이션을 배포해 배포 과정에서의 오류를 최소화합니다. - 플러그인 시스템
Jenkins는 1,800개 이상의 플러그인을 지원하여 다양한 개발 환경과 도구를 통합할 수 있습니다.
예: Git, Docker, Kubernetes, Maven, Gradle 등. - 분산 빌드
Master-Agent 구조를 통해 여러 서버에서 병렬 빌드 및 작업을 수행할 수 있습니다. - 다양한 언어 및 플랫폼 지원
Java, Python, Ruby, C#, JavaScript 등 다양한 언어와 Windows, macOS, Linux 플랫폼을 지원합니다.
주요 구성 요소
- 파이프라인(Pipeline)
파이프라인은 Jenkins에서 작업을 정의하는 코드입니다.- Declarative Pipeline: 읽기 쉽고 간결한 구문.
- Scripted Pipeline: Groovy를 기반으로 복잡한 논리를 구현 가능.
- pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Building...'
}
}
stage('Test') {
steps {
echo 'Testing...'
}
}
stage('Deploy') {
steps {
echo 'Deploying...'
}
}
}
}
- 노드(Node)
빌드를 실행하는 서버로, Master와 Agent로 나뉩니다. - 작업(Job)
Jenkins에서 실행되는 기본 단위로, 빌드, 테스트, 배포 등의 작업을 정의합니다. - 워크스페이스(Workspace)
Jenkins가 작업을 실행하기 위해 소스 코드와 빌드 산출물을 저장하는 디렉터리입니다.
사용 사례
- 코드 통합 및 테스트
- GitHub, GitLab과 통합하여 코드 변경 시 자동 빌드 및 테스트 수행.
- 애플리케이션 배포
- Docker와 Kubernetes를 사용한 컨테이너 배포 자동화.
- 모니터링 및 알림
- 작업 상태를 Slack, 이메일, Microsoft Teams 등으로 알림.
젠킨스의 한계
- 초기 설정 복잡성
대규모 프로젝트에서 많은 설정이 필요할 수 있음. - 리소스 사용량
많은 작업을 동시에 실행하면 높은 서버 리소스를 소비. - 플러그인 의존성
플러그인이 많아질수록 관리가 복잡해질 수 있음.
젠킨스의 고급 기능
- 멀티 브랜치 파이프라인(Multi-Branch Pipeline)
브랜치별로 개별적인 CI/CD를 수행할 수 있도록 지원합니다.
예: develop, feature/*, hotfix/* 브랜치에 따라 자동으로 파이프라인을 실행. - Blue Ocean
젠킨스의 최신 UI 플러그인으로, 기존 UI보다 직관적이고 시각화된 파이프라인 설정을 지원합니다. - Credentails Management
젠킨스에서 민감한 정보를 안전하게 관리할 수 있도록 지원합니다.- 예: API 키, 비밀번호, SSH 키 등.
- Parameterized Builds
빌드 실행 시 사용자가 직접 파라미터를 입력하여 다양한 설정으로 작업 가능. - Trigger와 Hook
- Webhook: GitHub, GitLab에서 코드가 푸시될 때 자동으로 빌드를 트리거.
- Cron Trigger: 정해진 시간에 작업을 실행.
예: 매일 새벽 3시에 데이터 백업.
젠킨스의 플러그인 사용 사례
- Git 플러그인
GitHub, GitLab, Bitbucket 등의 버전 관리 시스템과 쉽게 연동 가능. - Docker 플러그인
Docker 컨테이너 안에서 빌드 작업을 실행하거나, Docker 이미지를 생성 및 푸시. - Kubernetes 플러그인
Kubernetes 클러스터에서 동적으로 에이전트를 생성해 작업 처리. - Slack 플러그인
빌드 결과를 Slack 채널로 전송해 팀원과 실시간 공유. - JUnit 플러그인
테스트 결과를 시각화하고, 실패한 테스트에 대한 세부 정보를 제공.
젠킨스와 최신 트렌드 결합
- 젠킨스와 GitOps
- 젠킨스를 통해 Kubernetes 환경에서 GitOps 방식으로 배포 관리.
- ArgoCD, Flux와 함께 활용 가능.
- 젠킨스와 AI/ML
- 머신러닝 모델의 자동 학습 및 배포 파이프라인 구축.
- TensorFlow나 PyTorch를 활용한 학습 결과 검증 및 배포.
- 젠킨스와 IaC(Infrastructure as Code)
- Terraform이나 Ansible과 연계해 인프라를 자동으로 구성하고 배포.
- 젠킨스와 클라우드 통합
- AWS, Azure, GCP에서 제공하는 클라우드 자원을 동적으로 활용.
- AWS Lambda를 활용한 서버리스 애플리케이션 배포.
젠킨스 사용 시 최적화 팁
- 병렬 빌드
대규모 프로젝트에서 빌드 시간을 줄이기 위해 병렬로 작업 수행. - 플러그인 최소화
필수 플러그인만 설치해 안정성을 유지. - 에이전트 활용
빌드 서버를 분리해 마스터 노드의 부하를 최소화. - 모니터링 도구 통합
Prometheus와 Grafana로 젠킨스 서버 상태를 모니터링. - 백업 전략
중요한 설정과 데이터를 주기적으로 백업.
'DevOps > Jenkins' 카테고리의 다른 글
Jenkinsfile 이란? (0) | 2024.11.27 |
---|---|
Jenkins New item 페이지 (0) | 2024.11.24 |
Jenkins agent (0) | 2024.11.24 |
Groovy 란? (0) | 2024.11.24 |
Jenkins 에이전트 (0) | 2024.11.21 |