내 잡다한 노트
Jenkins agent 본문
Jenkins에서 agent는 파이프라인 작업을 실행하는 데 필요한 환경을 제공하는 컴퓨터나 컨테이너를 의미합니다. 파이프라인의 각 단계(빌드, 테스트, 배포 등)는 이 agent에서 실행됩니다.
1. Jenkins의 Agent란?
역할
- 파이프라인 작업 실행
- Jenkins Master(Controller)에서 정의한 작업을 받아 실제로 실행하는 역할을 합니다.
- 예: 소스코드 빌드, 테스트 수행, 배포 작업.
- 작업 분배
- Jenkins Master는 작업을 분배하고 관리하며, Agent는 할당된 작업을 실행합니다.
- 여러 Agent를 사용하면 작업을 병렬로 처리하거나, 특정 환경에서 실행할 작업을 분리할 수 있습니다.
- 환경 제공
- 빌드/테스트 작업에 필요한 도구와 라이브러리가 설치된 환경(예: 특정 운영체제, 도커 컨테이너 등)을 제공.
2. Jenkins Agent의 구성 요소
- Jenkins Master/Controller
- Jenkins의 중앙 서버로, 작업(파이프라인)을 계획하고 Agent에 작업을 분배합니다.
- 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 |