Jenkins 아키텍처 및 핵심 개념
3️⃣ Jenkins 아키텍처 및 핵심 개념
1. Jenkins Master-Slave 아키텍처
Jenkins는 기본적으로 Master-Slave 구조로 설계되어 있으며, 이를 통해 분산 빌드를 지원합니다.
- Master: Jenkins 서버의 중앙 관리자로, 파이프라인을 관리하고, 사용자 인터페이스(UI)를 제공합니다. Master는 주로 빌드 실행을 제어하고 관리하지만 실제 빌드를 수행하지 않습니다.
- Slave (Agent): 실제 빌드와 실행을 수행하는 서버로, Master에서 분배된 작업을 처리합니다. 여러 개의 Slave를 연결하여 빌드를 분산할 수 있습니다.
그림: Jenkins Master-Slave 아키텍처
2. Jenkins의 주요 컴포넌트
Jenkins는 여러 중요한 컴포넌트로 구성되어 있으며, 각 컴포넌트는 다양한 기능을 담당합니다.
-
Controller (Master): Jenkins의 핵심 서버로, 사용자가 인터페이스를 통해 작업을 관리할 수 있도록 합니다. Controller는 빌드 작업을 할당하고, 플러그인 및 설정을 관리합니다.
-
Agent (Worker/Node): 빌드 작업을 실제로 실행하는 서버입니다. 여러 개의 Agent를 설정하여 분산 빌드를 수행할 수 있습니다.
-
Job: Jenkins에서 실행할 작업의 단위로, 빌드, 테스트, 배포 등의 작업을 포함할 수 있습니다.
-
Pipeline: 여러 Job을 정의하여 하나의 흐름으로 연결된 작업을 수행할 수 있는 스크립트입니다.
-
Build: Job이 실행될 때마다 생성되는 실행 단위입니다.
3. Controller (Master): Job 관리 및 UI 제공
Jenkins의 Controller는 빌드 작업의 관리 및 분배를 담당하는 중심 서버입니다. 사용자는 이곳에서 빌드를 설정하고 관리하며, Jenkins의 UI를 통해 다양한 작업을 수행할 수 있습니다.
- Job 관리: Controller에서 새로운 Job을 생성하고, 기존 Job을 수정하거나 삭제할 수 있습니다.
- UI 제공: 사용자에게 직관적인 UI를 제공하여, Job 실행 상태나 빌드 결과를 확인할 수 있습니다.
4. Agent (Worker/Node): 실제 빌드 및 실행 수행
Jenkins의 Agent는 Master로부터 할당된 작업을 실제로 수행하는 서버입니다. 여러 개의 Agent를 설정하여 작업을 분산시킬 수 있으며, 다양한 환경에서 빌드를 병렬로 실행할 수 있습니다.
- 에이전트 설정: Jenkins의 Master는 각 Agent에 작업을 분배하며, 각 Agent는 필요한 환경에서 빌드를 수행합니다.
- 빌드 분산: 여러 Agent를 통해 빌드를 분산시켜 빠르고 효율적으로 실행할 수 있습니다.
5. Pipeline, Job, Build의 개념
-
Pipeline: Jenkins의 Pipeline은 복잡한 빌드 및 배포 작업을 자동화하는 스크립트입니다. 여러 Job을 하나의 흐름으로 연결하여 실행할 수 있습니다.
예시: 간단한 Declarative Pipeline
pipeline { agent any stages { stage('Build') { steps { echo 'Building...' } } stage('Test') { steps { echo 'Testing...' } } } }
-
Job: Jenkins에서 수행할 작업의 단위입니다. Job은 하나의 빌드 작업으로, 특정 작업을 수행하기 위한 설정을 포함합니다.
-
Build: Job이 실행될 때마다 생성되는 실행 단위로, 각 Build는 고유한 빌드 번호를 가집니다.
6. Jenkins의 주요 디렉토리 구조 (/var/lib/jenkins, JENKINS_HOME)
-
/var/lib/jenkins: Jenkins의 기본 설치 경로로, Jenkins의 설정 파일 및 데이터가 저장됩니다.
-
JENKINS_HOME: Jenkins의 홈 디렉토리로, 모든 Jenkins 설정과 플러그인, 빌드 기록 등이 이 경로에 저장됩니다. 이 디렉토리는 Jenkins 서버의 상태를 복원하거나 마이그레이션하는 데 사용됩니다.
그림: Jenkins 디렉토리 구조
7. Jenkins 환경 변수 (BUILD_ID, WORKSPACE, JENKINS_URL)
Jenkins는 빌드와 실행 환경에 대한 다양한 환경 변수를 제공합니다. 이들 환경 변수는 Jenkins 내에서 자동으로 설정되며, 스크립트에서 참조하여 사용할 수 있습니다.
- BUILD_ID: 현재 빌드의 고유 ID로, Jenkins의 빌드 번호를 나타냅니다.
- WORKSPACE: 현재 실행 중인 Job의 작업 디렉토리 경로입니다.
- JENKINS_URL: Jenkins 서버의 URL입니다. 예를 들어,
http://localhost:8080
.
예시: 환경 변수 사용
pipeline {
agent any
stages {
stage('Info') {
steps {
echo "Build ID: ${env.BUILD_ID}"
echo "Workspace: ${env.WORKSPACE}"
echo "Jenkins URL: ${env.JENKINS_URL}"
}
}
}
}
Jenkins의 아키텍처와 핵심 개념을 이해하면, Jenkins의 효율적인 사용과 구성이 가능해집니다.