Jenkins란?

김현정·2025년 5월 22일
0

1. Jenkins

1.1 Jenkins란?

Jenkins는 CI/CD를 위한 오프 소스 도구로, 소프트웨어 개발 생명주기를 자동화한다.

Jenkins를 사용하면 코드 변경 사항이 발생할 때마다 자동으로 빌드, 테스트, 배포 과정을 수행할 수 있기 때문에 개발자는 코드 변경에 따른 빌드 및 테스트 과정을 수동으로 수행할 필요가 없어지며, 신속하게 개발에 대한 코드 검증 및 배포할 수 있고, 이 과정에서 휴먼 에러를 방지할 수 있다.

Jenkins는 다양한 플러그인을 지원하기 때문에 사용자가 필요에 맞게 플러그인을 통합하여 CI/CD 환경을 확장할 수 있다. 하지만 다양한 플러그인을 사용하여 파이프라인을 구성하면 구성이 복잡해질 수 있고, 이에 따른 버전 호환성, 보안 사항 등을 고려해야 하기 때문에 유지보수에 어려움을 겪을 수 있다. 그렇기 때문에 환경에 필요한 플러그인을 잘 선택하여 사용하는 것이 중요하다.

1.2 Master/Slave라는 구조로 동작

1.2.1 Master

Master는 controller라고 불리며, Jenkins slave를 관리하고 작업 스케줄링과 slave 모니터링을 포함하여 다양한 작업을 관리한다.

1.2.2 Slave

slave는 agent라고 불리며, 실제 파이프라인 작업을 수행한다. 다양한 환경에서 작동하며 작업을 분산시켜 부하를 감소시키는 역할을 담당한다. agent는 로컬 또는 클라우드 컴퓨터를 통해 Jenkins controller에 연결될 수 있어 다양한 유연성을 제공한다.

1.2.3 역할


1. SCM (Source Code Management)Jenkins는 코드가 보관되어 있는 Git 저장소에 코드 변경사항을 감지하여 자동으로 파이프라인을 수행할 수 있다. Git 저장소에는 소스 코드뿐 아니라 Jenkins 스크립트 실행에 필요한 'Jenkinsfile'과 Kubernetes 배포에 필요한 'Helm Chart'와 같은 파일들도 보관될 수 있다.

.2 CI (Continuous Integration) 파이프라인이 실행되면 Agent를 통해 파이프라인 스크립트에 정의된 작업(job)이 실행된다. 이때 소스 코드 빌드, 코드 검증 테스트, 도커 이미지 빌드, 도커 이미지 검증 등 여러 작업이 순차적으로 진행된다.

  1. CD (Continuous Deployment) 파이프라인에서 정의한 배포 작업에 따라 애플리케이션은 쿠버네티스 환경에 배포된다. 이 배포는 Jenkins를 통해 수행될 수도 있고, Kubernetes 환경에서 널리 사용되는 ArgoCD와 같은 도구를 활용하여 수행될 수도 있다.

2. Jenkins 구성

2.1 전제 조건

AWS EKS 클러스터
Helm CLI 도구

2.2 설치 환경

AWS EKS : v1.27.7
Helm : v3.8.2

2.3 설치 버전

Jenkins Helm Chart 버전 : 4.11.1
Jenkins Helm APP 버전 : 2.426.2

2.4 Jenkins 구성

2.4.1 Docker를 이용한 설치

docker run -d \
  --name jenkins \
  -p 8080:8080 \
  -p 50000:50000 \
  -v jenkins_home:/var/jenkins_home \
  jenkins/jenkins:lts

2.4.2 초기 설정

1. 웹 인터페이스 접속

  • 브라우저에서 http://localhost:8080 접속
  • 초기 관리자 비밀번호 입력(로그에서 확인 가능)

2. 플러그인 설치

  • "Install suggested plugins" 선택 (기본 권장 플러그인)
  • 또는 "Select plugins to install"로 필요한 플러그인만 선택

3. 관리자 계정 생성

  • 사용자명, 비밀번호, 이메일 등 입력

2.4.3 주요 구성 요성

Job/Pipeline 생성

  1. New Item 클릭
  2. 프로젝트 타입 선택 :
    • Freestyle project: 간단한 빌드 작업
    • Pipeline: 코드로 정의된 CI/CD 파이프라인
    • Multibranch Pipeline: 여러 브랜치 자동 관리

Pipeline 예시 (Jenkinsfile)

pipeline {
    agent any
    
    stages {
        stage('Checkout') {
            steps {
                git 'https://github.com/your-repo.git'
            }
        }
        
        stage('Build') {
            steps {
                sh 'mvn clean compile'
            }
        }
        
        stage('Test') {
            steps {
                sh 'mvn test'
            }
        }
        
        stage('Deploy') {
            steps {
                sh 'mvn deploy'
            }
        }
    }
    
    post {
        always {
            junit 'target/surefire-reports/*.xml'
        }
    }
}

2.4.4 시스템 관리

글로벌 도구 구성

Manage Jenkins > Global Tool Configuration에서:

  • JDK 경로 설정
  • Maven, Gradle 설정
  • Node.js, Python 등 다른 도구들 설정

플러그인 관리

유용한 플러그인들:

  • Git Plugin: Git 연동
  • Blue Ocean: 현대적인 UI
  • Pipeline Plugin: 파이프라인 기능
  • Docker Plugin: Docker 연동
  • Slack Notification: 슬랙 알림

보안 설정

Manage Jenkins > Configure Global Security:

  • 사용자 인증 방식 설정
  • 권한 관리 (Matrix-based security 권장)
  • CSRF 보호 활성화

2.4.5 노드(Agent) 구성

추가 빌드 노드 연결

  • Manage Jenkins > Manage Nodes and Clouds
  • New Node 생성
  • 연결 방식 선택:
    - SSH를 통한 연결
    - JNLP를 통한 연결

2.4.6 백업 및 유지보수

중요 디렉토리

  • Jenkins 홈: /var/jenkins_home (Docker) 또는 /var/lib/jenkins
  • 주요 백업 대상:
    - jobs/: 모든 작업 설정
    - config.xml: 전역 설정
    - plugins/: 설치된 플러그인

정기 유지보수

  • 플러그인 정기 업데이트
  • 로그 파일 정리
  • 디스크 사용량 모니터링

출처: https://wlsdn3004.tistory.com/63

0개의 댓글