🥔Jenkins란 무엇인가?
- Jenkins는 CI(Continuous Integration) / CD(Continuous Delivery·Deployment)를 위한 오픈소스 자동화 서버다.
- 코드 변경이 발생하면 빌드, 테스트, 배포 과정을 자동으로 수행한다.
- 쉽게 말해 “코드가 변경되면 자동으로 빌드·테스트·배포를 해주는 도구”다.
🥔Jenkins의 핵심 개념
🥔Jenkins가 하는 일의 흐름
- 개발자가 GitLab 또는 GitHub에 코드 push를 수행한다.
- Jenkins가 Webhook 또는 Polling 방식으로 변경을 감지한다.
- 정의된 Job 또는 Pipeline을 실행한다.
- 실행 결과를 리포트로 제공한다.
(성공 / 실패 상태, 로그, 알림 포함)
🥔Jenkins의 주요 구성 요소
🧩 Jenkins Controller (Master)
- 웹 UI를 제공한다.
- Job과 Pipeline을 관리한다.
- 빌드 스케줄링을 담당한다.
- 빌드 결과와 로그를 관리한다.
⚙️ Agent (Node)
- 실제 빌드와 테스트를 수행하는 머신이다.
- 여러 개의 Agent를 구성할 수 있다.
- Linux, Windows, macOS 등 다양한 환경을 지원한다.
🥔Jenkins Pipeline
1) Declarative Pipeline (권장)
Jenkinsfile로 파이프라인을 정의한다.
- 파이프라인을 코드로 관리하는 Pipeline as Code 방식이다.
- 가독성과 유지보수성이 높다.
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'make build'
}
}
stage('Test') {
steps {
sh 'make test'
}
}
stage('Deploy') {
steps {
sh './deploy.sh'
}
}
}
}
2) Freestyle Job
- UI에서 클릭 방식으로 설정한다.
- 설정이 단순하지만 재현성과 유지보수성이 낮다.
- 규모가 커질수록 관리가 어려워진다.
🥔Jenkins의 강점
✅ 플러그인 생태계
- 1,800개 이상의 플러그인을 제공한다.
- Git, Docker, Kubernetes, Slack, AWS 등 대부분의 도구와 연동 가능하다.
✅ 높은 자유도
- 특정 언어나 빌드 도구에 종속되지 않는다.
- 복잡한 CI/CD 파이프라인 구성에 적합하다.
✅ 완전한 오픈소스
- 벤더 락인이 없다.
- 사내 환경에 맞게 자유롭게 커스터마이징 가능하다.
🥔Jenkins의 단점
⚠️ 운영 부담
- Jenkins 서버를 직접 관리해야 한다.
- 플러그인 충돌 및 버전 관리 이슈가 발생할 수 있다.
- 업그레이드 과정이 까다롭다.
⚠️ 초기 설정 난이도
- 보안 설정과 권한 관리를 직접 구성해야 한다.
- 표준화가 없으면 유지보수가 어려운 구조가 되기 쉽다.
🥔Jenkins vs GitLab CI 간단 비교
| 항목 | Jenkins | GitLab CI |
|---|
| 설치 | Self-hosted | SaaS / Self-hosted |
| 설정 방식 | Jenkinsfile / UI | .gitlab-ci.yml |
| 플러그인 | 매우 풍부 | 제한적 |
| 운영 부담 | 높음 | 낮음 |
| 통합성 | 외부 연동 중심 | GitLab과 완전 통합 |
| 러닝 커브 | 중~높음 | 낮음 |
🥔Jenkins를 언제 쓰면 좋은가?
- 기존에 Jenkins 인프라가 이미 구축된 경우에 적합하다.
- 매우 복잡한 CI/CD 파이프라인이 필요한 경우에 유리하다.
- 다양한 레거시 시스템과의 연동이 필요한 환경에 적합하다.
- GitLab CI로는 부족한 수준의 커스터마이징이 필요한 경우에 적합하다.
🥔Jenkins + GitLab 조합
- 실무에서 자주 사용되는 조합이다.
- GitLab은 코드 관리와 MR을 담당한다.
- Jenkins는 CI/CD 실행 엔진 역할을 수행한다.
- GitLab Webhook을 통해 Jenkins Job을 트리거한다.