내 잡다한 노트

Jenkins agent 본문

DevOps/Jenkins

Jenkins agent

peanutwalnut 2024. 11. 24. 14:27

Jenkins에서 agent는 파이프라인 작업을 실행하는 데 필요한 환경을 제공하는 컴퓨터나 컨테이너를 의미합니다. 파이프라인의 각 단계(빌드, 테스트, 배포 등)는 이 agent에서 실행됩니다.

 

1. Jenkins의 Agent란?

역할

  1. 파이프라인 작업 실행
    • Jenkins Master(Controller)에서 정의한 작업을 받아 실제로 실행하는 역할을 합니다.
    • 예: 소스코드 빌드, 테스트 수행, 배포 작업.
  2. 작업 분배
    • Jenkins Master는 작업을 분배하고 관리하며, Agent는 할당된 작업을 실행합니다.
    • 여러 Agent를 사용하면 작업을 병렬로 처리하거나, 특정 환경에서 실행할 작업을 분리할 수 있습니다.
  3. 환경 제공
    • 빌드/테스트 작업에 필요한 도구와 라이브러리가 설치된 환경(예: 특정 운영체제, 도커 컨테이너 등)을 제공.

 

2. Jenkins Agent의 구성 요소

  1. Jenkins Master/Controller
    • Jenkins의 중앙 서버로, 작업(파이프라인)을 계획하고 Agent에 작업을 분배합니다.
  2. Jenkins Agent/Node
    • 작업을 실행하는 노드. Agent는 Master와 통신하여 명령을 받아 실행합니다.

 

3. Jenkins Agent의 유형

Jenkins에서 Agent를 사용하는 방식은 여러 가지가 있습니다. 대표적인 유형은 다음과 같습니다:

1) Built-in Node (Master Node)

  • Jenkins Master 자체가 Agent 역할을 수행합니다.
  • Jenkins를 설치한 컴퓨터에서 모든 작업이 실행됩니다.
  • 특징 : 
    • 간단한 프로젝트에 적합.
    • Master와 Agent가 분리되지 않아 성능 저하 및 보안 이슈 발생 가능.

 

2) Static Agent (정적 에이전트)

  • 사용자가 Jenkins Master와 연결된 물리적 컴퓨터나 가상 머신을 Agent로 설정.
  • 특정 작업을 이 Agent에서 실행하도록 설정.
  • 특징 : 
    • 특정 하드웨어나 운영체제가 필요한 작업에 적합.
    • 환경이 고정되어 있어 설정과 디버깅이 단순함.
    • 예: Windows 전용 애플리케이션 빌드용 Agent.

 

3) Dynamic Agent (동적 에이전트)

  • Docker, Kubernetes, 클라우드 서비스와 통합하여 작업 실행 시점에만 임시로 생성되는 Agent.
  • 작업이 끝나면 Agent가 자동으로 삭제됩니다.
  • 특징 :  
    • 자원을 효율적으로 사용 가능.
    • 클라우드 환경이나 CI/CD에 적합.
    • Jenkins의 Kubernetes Plugin 또는 Docker Plugin으로 구현 가능.

 

 

4) Cloud-based Agent (클라우드 에이전트)

  • AWS, GCP, Azure 같은 클라우드에서 Agent를 실행.
  • Jenkins Master와 연결하여 작업을 실행합니다.
  • 특징 :  
    • 클라우드 기반으로 확장성 높음.
    • Jenkins의 Cloud Plugin을 사용하여 설정.

 

 

4. Jenkins Pipeline에서 Agent 사용

Jenkins Pipeline에서는 agent 키워드를 사용해 작업 실행 환경을 정의합니다.

(1) 전체 파이프라인에 Agent 지정

파이프라인 전체에 사용할 Agent를 정의합니다.

pipeline {
    agent any  // 모든 가용 Agent에서 실행
    stages {
        stage('Build') {
            steps {
                echo 'Building...'
            }
        }
    }
}

 

(2) 특정 Node 지정

특정 노드에서만 실행되도록 설정합니다.

pipeline {
    agent {
        label 'linux-node'  // 이름이 'linux-node'인 Agent에서 실행
    }
    stages {
        stage('Test') {
            steps {
                echo 'Testing...'
            }
        }
    }
}

 

 

(3) Docker 컨테이너를 Agent로 사용

파이프라인 작업을 Docker 컨테이너 안에서 실행합니다.

pipeline {
    agent {
        docker {
            image 'python:3.8'  // Python 3.8 이미지를 사용하는 컨테이너에서 실행
        }
    }
    stages {
        stage('Run Tests') {
            steps {
                sh 'python --version'
            }
        }
    }
}

 

 

(4) Stage별로 다른 Agent 지정

파이프라인의 특정 단계(Stage)마다 다른 Agent를 사용합니다.

pipeline {
    agent none  // 기본적으로 모든 Stage에 Agent를 할당하지 않음
    stages {
        stage('Build') {
            agent { label 'windows-node' }  // Windows 노드에서 실행
            steps {
                echo 'Building on Windows...'
            }
        }
        stage('Test') {
            agent { label 'linux-node' }  // Linux 노드에서 실행
            steps {
                echo 'Testing on Linux...'
            }
        }
    }
}

'DevOps > Jenkins' 카테고리의 다른 글

Jenkinsfile 이란?  (0) 2024.11.27
Jenkins New item 페이지  (0) 2024.11.24
Groovy 란?  (0) 2024.11.24
Jenkins 에이전트  (0) 2024.11.21
젠킨스 Jenkins  (1) 2024.11.21