서론
젠킨스는 대규모 프로젝트를 효율적으로 처리하기 위해 분산 빌드를 지원한다. 이를 통해 여러 에이전트(Node)에서 작업을 분산 실행할 수 있으며, 빌드 속도와 시스템 자원 활용도를 크게 향상시킬 수 있다.
젠킨스 분산 아키텍처
젠킨스는 컨트롤러(Controller)와 에이전트(Agent)로 구성된 분산 아키텍처를 사용한다.
- 컨트롤러: 빌드 작업 관리, UI 제공, 빌드 로깅 등의 역할을 수행.
- 에이전트(슬레이브): 컨트롤러에서 할당된 작업을 실행하는 역할을 수행.
분산 빌드의 장점으로는 다음과 같다.
- 대규모 작업의 병렬 처리 가능.
- 다양한 플랫폼에서 작업 실행.
- 빌드 서버 간 부하 분산.
컨트롤러와 에이전트의 연결
분산 빌드를 실행하려면 컨트롤러와 에이전트가 연결되어야 한다. 연결 방법은 다음 두가지가 있다.
- 컨트롤러에서 에이전트로 연결
- 컨트롤러가 에이전트로 연결 요청을 보낼 수 있도록 에이전트 구성(최소한의 설정으로 에이전트 기기를 구성할 수 있다.)
- 에이전트는 JDK/JRE만 설치하면 된다. 컨트롤러는 SSH 포트를 통해 에이전트 시스테모가 연결하고, 에이전트에서는 remoting.jar을 복사한 후, 해당 시스템에서 사용 가능한 JDK/JRE를 사용해 실행한다.
- 에이전트에서 컨트롤러로 연결
- 컨트롤러가 에이전트에 접속할 수 없는 경우에는 에이전트 프로세스를 시작할 수 없으므로 이때는 자바 네트워크 실행 프로토콜(JNLP)를 에이전트를 구성해야 한다.
- 컨트롤러 기기의 젠킨스에서 Manage Jenkins > Configure Global Security로 이동 후, Agent 섹션의 TCP port for inboud agent 옵션에서 fixed 또는 Random을 선택해야 한다.
SSH로 컨트롤러에서 에이전트로의 연결
- SSH Build Agents 플러그인 설치
- 젠킨스 대시보드에서 Manage Jenkins를 클릭한다.
- Plugin Manager로 이동 후 Available Plugins 탭에서 "SSH Build Agents"를 검색한다.
- 플러그인을 선택하고 설치한다.
- 설치 후 젠킨스를 다시 시작하여 변경 사항을 적용한다.
- 에이전트 자바 설치
- 에이전트 시스템에 접속한다.
- Java가 설치되어 있는지 확인한다. 설치되어 있지 않다면 OpenJDK를 설치한다.
- SSH 공개 키-개인 키 쌍 생성
- 컨트롤러에서 SSH 키를 생성한다.
- 키 쌍 생성 시 경로를 기본값으로 두고, 필요 시 패스프레이즈를 설정한다.
- 개인 키가 포함된 자격 증명 항목을 컨트롤러 기기에 추가
- 젠킨스 대시보드에서 Manage Jenkins > Manage Credentials로 이동한다.
- 적절한 스코프(Global or Folder)를 선택하고, Add Credentials를 클릭한다.
- Kind를 "SSH Username with private key"로 설정한다.
- Username 필드에 에이전트에서 사용할 사용자 이름을 입력한다.
- Private Key에 생성된 개인 키를 붙여넣는다.
- 저장 후 해당 자격 증명이 추가되었는지 확인한다.
- 젠킨스 컨트롤러에 노드 추가
- 젠킨스 대시보드에서 Manage Jenkins > Manage Nodes and Clouds로 이동한다.
- New Node를 클릭하여 노드를 추가한다.
- 노드 이름과 Permanent Agent를 선택 후 세부 정보를 입력한다.
- 원격 작업 디렉터리
- 에이전트 실행 방법을 Launch agent via SSH로 설정
- 이전에 설정한 SSH 자격 증명을 선택한다.
- 에이전트의 authorized_keys 파일에 공개키 추가
- 에이전트 시스템에 접속한다.
- '~/.ssh/authorized_keys' 파일을 편집
- nano ~/.ssh/authorized_keys
- 컨트롤러에서 생성한 공개 키를 파일에 붙여넣는다.
- 저장 후 파일을 닫는다.
- 에이전트의 authorized_keys 파일 권한 변경
- SSH 키 파일 권한을 적절히 설정하여 보안을 강화합니다:.ssh 디렉터리에도 올바른 권한이 설정되어 있는지 확인:chmod 700 ~/.ssh
- chmod 600 ~/.ssh/authorized_keys
- sshd 서비스 재시작
- 변경 사항을 적용하기 위해 SSH 데몬을 재시작합니다sudo systemctl restart sshd
- SSH 서비스가 올바르게 실행되고 있는지 확인:
- sudo systemctl status sshd
- 컨트롤러에서 에이전트로 연결 확인
- 컨트롤러 시스템에서 에이전트로 SSH 접속을 테스트ssh <agent_username>@<agent_ip>
- 연결이 성공하면 설정이 올바르게 완료된 것입니다.
- 컨트롤러에서 새 노드 시작
- 젠킨스 대시보드로 돌아가 노드를 시작한다.
- Manage Nodes and Clouds 화면에서 새로 추가된 노드를 선택하고, 상태를 확인한다.
- 노드가 정상적으로 연결되었다면 Online 상태로 표시된다
Node1 에이전트에서 실행할 프리스타일 작업 생성
- 작업 생성:
- Jenkins 대시보드에서 새 작업(New Item) 선택.
- 프리스타일 프로젝트(Freestyle Project) 선택 후 작업 이름 입력.
- 노드 지정:
- Restrict where this project can be run 옵션 활성화.
- Label Expression에 Node1 입력.
- 작업 설정 및 저장:
- 빌드 단계와 기타 설정을 추가 후 저장.
Node1 에이전트에서 새로운 프리스타일 작업 실행
- Jenkins에서 생성한 작업 선택 후 Build Now 클릭.
- Console Output을 통해 Node1 에이전트에서 실행된 로그 확인.
- 에이전트 상태가 정상이고 작업이 성공적으로 실행되는지 확인.
JNLP를 사용해 에이전트와 컨트롤러를 연결하는 구성 이해
JNLP(Java Network Launch Protocol)는 Java 애플리케이션을 원격으로 다운로드 및 실행하기 위한 프로토콜이다. Java Web Start 기술의 일부로 설계되었으며, Java 애플리케이션 배포를 단순화하고 클라이언트와 서버 간의 통신을 가능하게 한다. 젠킨스에서는 에이전트와 컨트롤러 간의 연결을 설정하는 데 사용된다.
- 컨트롤러 구성
- jenkins 대시보드에서 Manage Jenkins > Configure Global Security 선택.
- Agent 섹션의 TCP port for inbound agent 항목에서 Fixed 선택하고, 포트 번호를 입력한다.
- 젠킨스 URL 설정
- jenkins 대시보드에서 Manage Jenkins > Configure System 선택.
- Jenkins Laocation 섹션에 jenkins URL 필드에 http://<컨트롤러_IP_주소:포트_번호> 입력
- 단, local host를 사용하면 접속할 수 없다.
- 에이전트 기기에서 새 노드 추가
- jenkins 대시보드에서 Manage Jenkins > Manage Nodes and Clouds 선택.
- New Node 클릭 후 필드 입력 후 실행
JNLP 노드에서 실행할 작업 생성
리포지터리에서 코드를 가져와서 JAR 파일을 빌드하고, 이를 넥서스로 배포하는 JNL PNodesJob이라는 작업을 만든다. Label Expression 필드에 Node3라는 값을 대신 넣는다. 대시보드에서 실행 아이콘 클릭해서 작업을 실행한다. 그러면 작업이 Node3에서 실행되는 것을 볼 수 있다.
반응형
'VCS > CICD' 카테고리의 다른 글
젠킨스 CLI와 원격 엑세스 (1) | 2025.01.03 |
---|---|
젠킨스 AWS와 통합 (0) | 2025.01.03 |
젠킨스 코드형 파이프라인 이해 (0) | 2025.01.01 |
젠킨스 파이프라인 이해 (0) | 2024.12.31 |
젠킨스, 메이븐과 넥서스 통합 및 자바 API 릴리스용 프리스타일 작업 생성 (0) | 2024.12.30 |
댓글