본문 바로가기
DevOps/Jenkins

[Jenkins] 젠킨스 마스터(Master) - 에이전트(Agent) 노드 설정

by 오이가지아빠 2021. 11. 22.

#1. 젠킨스 원격 서버 배포

젠킨스를 사용하여 원격서버에 배포하는 방법은 여러가지가 있겠지만, 대표적인 2가지를 살펴봅시다

 

1. 젠킨스 서버 내에서 최종 배포본을 생성한 후, 원격 서버로 이동시키는 방법

2. 젠킨스 서버(부모)에서 에이전트 노드 서버(자식)에 명령만 내리고 실제 작업은 에이전트가 수행하는 방법

 

먼저 1번을 대략 그림으로 표시하면 아래와 같은 느낌입니다.

Type 1

실제 배포할 서버에 보내기 전에, 젠킨스 서버에서 최종 결과물까지 생성하고 필요한 파일만 agent 서버에 보내는 방법입니다.

 

사실 젠킨스에 Job이 몇개 되지 않고, 동시에 많은 Job을 수행하지 않는다면 어떤 방법을 사용해도 상관없다고 생각하지만 저의 경우에는 젠킨스 마스터에 Job을 100개 이상 관리하기 때문에 잘 사용하지 않습니다.

(젠킨스가 배치 스케줄러의 역할까지 하고 있다면 더더욱)

 

2번의 방법으로 작업을 분산시키는 것이 효율면에서 훨씬 좋습니다.

Type 2

젠킨스 마스터는 에이전트와 ssh, jnlp 등의 방식으로 Agent서버와 연결합니다.

git clone부터 빌드, 파일 조합, 수정, 이동, 삭제 등등의 작업은 젠킨스 마스터 서버가 아닌 Agent 서버에서 수행합니다.

따라서, 마스터서버에 가해지는 부담은 각각의 Agent서버에 분산됩니다.

 

그럼 젠킨스 Master - Agent 구성하는 방법을 알아보도록 하겠습니다.(윈도우즈 서버 기준)

 

#2. Jenkins Master - Agent 환경 설정

먼저 젠킨스에 관리자로 로그인 한 후, Jenkins 관리 > Configure Global Security 메뉴로 들어갑니다.

Agents 설정에 기본이 Disable로 되어 있을텐데, 이를 Fixed 혹은 Random을 선택합니다.

Master와 Agent간 방화벽이 완전히 뚫려 있을때는 Random으로 설정해도 되지만, 특정 포트만 허용하는 경우가 많으므로 Fixed를 설정하고 Port를 넣은 후 Save로 빠져나옵니다.

 

다음으로, Jenkins 관리 > 노드 관리 메뉴로 들어갑니다.

 

왼쪽의 신규 노드를 클릭한 후 Agent로 사용할 노드의 이름을 적당히 짓고 생성합니다.

설정할 내용을 간단히 살펴봅시다.

Numbers of executors - 해당 노드에서 동시에 실행할 수 있는 작업의 최대 숫자(일단 기본으로 두셔도 괜찮습니다.)

Remote root directory - 원격 서버에서의 작업 홈 디렉토리(해당 노드에서 수행되는 작업은 기본으로 이 폴더내에서 이루어 집니다. git clone 시에도 이 하위에 폴더가 생성되면서 소스가 받아집니다.)

Labels - Job 설정시에 배포할 노드를 선택하는 이름입니다. 여러 노드를 동일한 이름의 Label로 하여 그룹으로 묶을수도 있습니다.(1:1이라면 알아보기 쉽게 Name과 동일하게 설정합니다.)

Launch method - 아래과 같은 여러 선택지가 있습니다만, 개인적으로 윈도우즈 서버에 배포시에는 Launch agent by connecting it to the master 옵션을 사용합니다.(보통 리눅스에는 ssh, 윈도우에는 jnlp를 사용합니다.)

하단의 Environment variablesTool Locations 는 상황에 따라 설정합니다.

jdk의 위치가 서버마다 다르거나, git이 설치된 위치가 다르다면 Tool Locations 설정을 추가합니다.

 

이제 Save를 누르고 만들어진 Node로 들어가 봅시다.

노드에 연결된 프로젝트가 없고, 노드도 오프라인 상태입니다.

이제 Master서버와 Agent노드를 연결하도록 하겠습니다.

 

#3. Jenkins Master - Agent 연동

위 화면에서 노란색 Launch 버튼을 누르면 jenkins-agent.jnlp 파일이 다운로드 되고, 파란색 agent.jar 링크를 누르면 agent.jar 파일이 다운로드 됩니다. 일단 두 파일 전부 다운로드 후, 이제 연결할 Agent 서버의 적당한 곳으로 복사합니다.

개인적으로 보통 Remote root directory 에 설정한 폴더에 넣는 편입니다.

(두 파일을 동시에 사용하지는 않습니다. 노드를 연결하는 두 가지 방법에서 각각 사용합니다.)

1. agent.jar를 사용하는 방법

해당 위치에서 cmd를 열고 위에 나와있는 커맨드를 실행하면 노드가 온라인으로 변하면서 마스터의 명령을 기다리는 상태가 됩니다.

2. jenkins-agent.jnlp를 사용하는 방법

같은 위치에 편집기를 열고 .bat 파일을 생성합니다.

start "JenkinsAgent" cmd /c javaws -verbose jenkins-agent.jnlp

Agent서버에 javaws가 실행되지 않는다면 javaws가 포함된 jre혹은 jdk를 받은 후 다음과 같이 javaws의 위치를 지정하여 작성합니다.

start "JenkinsAgent" cmd /c "D:\Jenkins\jre1.8.0_162\bin\javaws" -verbose slave-agent.jnlp

이제 해당 .bat파일을 실행하면 Java Web Start 팝업이 나타나는데, 확인 > 실행으로 실행합니다.

아래와 같은 창이 나오고 잠시의 연결과정을 거친 후, 집사아저씨의 얼굴과 함께 Connected 문구가 나오면 성공입니다.

다시 노드의 서버의 상태를 확인해 보면

Agent is connected 상태로 바뀐 것을 확인할 수 있습니다.

 

이것으로 Master - Agent 노드 설정이 모두 완료되었습니다.

반응형

댓글