반응형
CI/CD 파이프라인의 중심에 있는 Jenkins는 다양한 환경에서 빌드를 실행할 수 있도록 노드(Node) 기능을 제공합니다. Jenkins Master는 기본적으로 하나의 Built-in Node(마스터 노드) 를 가지고 있으며, 확장성과 병렬 작업을 위해 외부 Agent(Node) 를 추가하는 방식으로 활용됩니다.
이번 글에서는 Jenkins에서 노드를 구성하는 방법과 함께, Built-in Node와 외부 Agent를 사용하는 차이점, 그리고 각각의 장단점을 비교해 보겠습니다.
1. Jenkins 노드란?
Jenkins에서 "노드(Node)"는 빌드 작업이 실행되는 물리적/가상 머신 또는 컨테이너를 의미합니다.
- Built-in Node: Jenkins가 설치된 머신(마스터) 자체가 빌드를 수행.
- 외부 Agent: 별도의 서버 또는 컨테이너에서 Jenkins Master와 통신하며 빌드를 수행.
이러한 구조를 통해 Jenkins는 빌드 작업을 분산시키고, 특정 환경에 맞는 작업을 실행할 수 있습니다.
2. Built-in Node 사용하기
Jenkins 설치 직후에는 Built-in Node만 활성화되어 있습니다. 설정은 간단합니다.
✔️ 특징
- Jenkins 설치 서버에서 빌드를 수행.
- 설정이 간편하며 소규모 프로젝트에 적합.
✔️ 사용 방법
- 노드 이름: (master) 또는 built-in.
- 작업 설정에서 Restrict where this project can be run 옵션에 master 또는 라벨을 입력하면 이 노드에서만 실행됩니다.
❗주의 사항
- 빌드로 인해 Jenkins 자체의 자원이 부족해질 수 있습니다. - 마스터가 사용하는 자원과 빌드 및 배포 자원이 모두 소요
- 보안상 Jenkins 서버에 직접 빌드 실행은 바람직하지 않습니다.
3. 외부 Agent(Node) 추가하기
대규모 프로젝트나 다양한 환경에서 빌드가 필요한 경우, 외부 노드를 추가하여 확장할 수 있습니다.
✔️ 종류
- SSH 방식: SSH를 통해 외부 서버에 접근.
- JNLP 방식: Jenkins가 Agent를 호출하는 대신 Agent가 마스터에 접속.
✔️ 설정 절차 (SSH 방식 예시)
- Manage Jenkins → Nodes → Settings
- 이름 입력 후 Permanent Agent 선택
- 다음 정보 입력
- Remote root directory: 빌드 작업에 사용할 디렉토리
- Labels: 노드를 식별하기 위한 라벨 (예: ubuntu, docker, gpu)
- Launch method: Launch agents via SSH
- SSH 정보 입력 (호스트, 사용자, 키)
4. Agent 방식
1. SSH 방식
- Jenkins Master가 원격 호스트에 SSH로 접속하여 agent.jar를 자동으로 전송하고 실행합니다.
- 설정: Manage Jenkins → Manage Nodes and Clouds → New Node → Launch agents via SSH
- 사전 조건: SSH 키 또는 계정 인증이 설정되어 있어야 하며, 에이전트 머신에 Java가 설치되어 있어야 합니다.
2. JNLP 방식 (Inbound Agent)
- 에이전트 머신에서 Jenkins Master로 연결을 시도하는 구조입니다.
- Master가 아닌 에이전트가 java -jar agent.jar -jnlpUrl ... 명령으로 직접 연결합니다.
- OS나 네트워크 방화벽이 강력한 환경에 적합합니다.
3. Docker 기반 에이전트 (Docker Plugin)
- Master가 Docker 호스트에서 컨테이너를 동적으로 생성해 빌드를 실행하고, 빌드 후 컨테이너를 삭제합니다.
- Docker Remote API를 열어두고, Docker Plugin을 설치 및 설정합니다.
4. Kubernetes 기반 에이전트 (Kubernetes Plugin)
- Jenkins Plugin이 Kubernetes에 Pod 형태로 에이전트를 띄우고, 빌드를 수행한 뒤 종료하는 방식입니다.
- 확장성 우수, 자원 관리 유연 → 빌드 환경 코드를 통한 관리 가능.
5. Command Launcher 플러그인
- Master에서 특정 명령어(예: SSH, RSH 등)로 에이전트 실행 가능.
- Master가 원격지에서 직접 커맨드를 실행할 수 있을 때 유용합니다.
6. Swarm Plugin 방식
- 여러 에이전트 머신에서 Swarm Agent를 실행해 Master에 연결합니다.
- Kubernetes나 AWS 같은 클라우드 환경에서 에이전트를 복수 복제할 수 있습니다.
5. 비교: Built-in Node vs 외부 Agent
| 항목 | Built-in Node | 외부 Agent |
| 실행 위치 | Jenkins 설치 서버 | 별도의 서버, 컨테이너 |
| 관리 편의성 | 설정 간단 | 초기 설정 필요 |
| 확장성 | 낮음 | 높음 |
| 자원 격리 | 없음 | 가능 |
| 보안 | 낮음 (Jenkins와 동일한 시스템 자원 공유) | 높음 (권한 분리 가능) |
| 사용 용도 | 소규모 프로젝트, 테스트 | 병렬 빌드, 다양한 환경, 리소스 분산 |
6. 어떤 선택이 적절할까?
- Built-in Node는 빠르게 Jenkins를 시작하고 싶을 때 유용합니다. 단, 트래픽이 늘어나거나 다양한 빌드 환경이 필요할 경우에는 외부 Agent로 전환하는 것이 좋습니다.
- 외부 Agent는 유지보수와 리소스 분산 측면에서 탁월합니다. 특히 Docker, GPU, iOS/Android 빌드 등 다양한 환경을 병렬로 처리하려면 반드시 필요합니다.
반응형
댓글