Controller와 Agent의 역할 분리
Jenkins Controller(구칭 Master)는 빌드 파이프라인을 스케줄링하고, 플러그인을 관리하며, 웹 UI를 제공하는 중앙 조율 노드입니다. Agent는 Controller의 지시에 따라 실제 빌드, 테스트, 배포 작업을 실행하는 워커 노드입니다. 실무에서는 Controller의 Executor 수를 0으로 설정하여 자체 작업을 실행하지 않게 하고, 모든 빌드 작업을 Agent에 위임합니다. 이렇게 하면 Controller의 파일 시스템에 대한 무분별한 접근을 제한하여 보안을 강화하고 안정성을 보장합니다.
Agent 레이블 기반 작업 라우팅
각 Agent는 고유 레이블(예: linux, windows, docker, high-memory)로 표시되어 작업 할당 시 조건 매칭이 가능합니다. Pipeline 정의 시 agent { label 'staging' } 같은 표현식으로 특정 Agent 그룹에만 작업을 제한할 수 있습니다. 이를 통해 OS 종속성, 특수 도구, 하드웨어 사양이 다른 다양한 환경을 효율적으로 관리합니다.
Remoting 통신 프로토콜
Controller와 Agent는 Jenkins Remoting 라이브러리를 통해 TCP 기반 양방향 통신을 합니다. SSH 커넥터(Unix/Linux)는 Controller가 능동적으로 연결을 개시하는 방식이고, Inbound Agent(주로 Windows)는 Agent가 먼저 Controller에 접속하는 방식입니다. 현재 권장 프로토콜은 JNLP4-connect로, TLS 암호화와 비동기 I/O를 지원합니다.