Jenkins 아키텍처 및 핵심 개념

Jenkins 아키텍처 및 핵심 개념

3️⃣ Jenkins 아키텍처 및 핵심 개념

1. Jenkins Master-Slave 아키텍처

Jenkins는 기본적으로 Master-Slave 구조로 설계되어 있으며, 이를 통해 분산 빌드를 지원합니다.

  • Master: Jenkins 서버의 중앙 관리자로, 파이프라인을 관리하고, 사용자 인터페이스(UI)를 제공합니다. Master는 주로 빌드 실행을 제어하고 관리하지만 실제 빌드를 수행하지 않습니다.
  • Slave (Agent): 실제 빌드와 실행을 수행하는 서버로, Master에서 분배된 작업을 처리합니다. 여러 개의 Slave를 연결하여 빌드를 분산할 수 있습니다.

그림: Jenkins Master-Slave 아키텍처

Jenkins Master-Slave Architecture

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 디렉토리 구조

Jenkins Directory Structure

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의 효율적인 사용과 구성이 가능해집니다.

RSS Feed