예전에 구현한 기능인데, 계속 다른걸 공부해서 올리다 보니 늦었다.
Jenkins 관리 텝에 들어가다 보면 여러가지 경고 문구를 볼 수 있는데, 여기서
"Building on the built-in node can be a security issue. You should set up distributed builds. See the documentation." 라는 문구의 경고 창을 볼 수 있다.
해당 경고는 보안과 안정성 측면에서 'Best Practice(모범 사례)'를 권장하고 있기 때문이다.
간단히 말해, "Jenkins 메인 서버(Controller)에서 직접 빌드를 돌리지 말고, 별도의 작업용 서버(Agent)를 연결해서 사용하라"는 뜻이다.
보안 위험: 빌드 스크립트에 악의적인 코드나 실수가 포함되어 있다면, Jenkins 설정 파일을 직접 수정하거나 삭제할 수 있다. 즉, 빌드 하나가 Jenkins 서버 전체를 망가뜨릴 수 있다.
성능 저하: 여러 빌드가 동시에 메인 서버에서 실행되면 CPU와 메모리 점유율이 올라가 Jenkins 대시보드 자체가 느려지거나 응답 불능 상태가 될 수 있다.
격리 실패: 빌드 도중 생성된 임시 파일이나 환경 변수가 Jenkins 시스템 자체에 영향을 줄 수 있다.
가장 권장되는 방식은 Controller-Agent 구조
Jenkins Controller (Main): 설정 관리, 빌드 스케줄링, UI 제공 (빌드는 수행하지 않음).
Jenkins Agent (Node): 실제 빌드 명령을 수행하는 별도의 서버 또는 컨테이너.
| 내장 노드의 실행기 수를 0으로 설정 |
|---|
![]() |
![]() |
![]() |
| 새로운 Agent 추가 |
|---|
![]() |
![]() |
| Agent 옵션 |
|---|
![]() |
C\JenkinsTest로 설정했다. 다만 이렇게 설정하려면 실제 경로에 같은 폴더가 있어야 한다.| 경로 |
|---|
![]() |
| Usage |
|---|
![]() |
Use this node as much as possible : 최대한 이 노드 사용
Only build jobs with label expressions matching this node : 이 노드와 일치하는 레이블 표현식이 있는 빌드만 실행
난 Use this node as much as possible을 사용했다.
| Launch method |
|---|
![]() |
| 방식 | 주도권 | 권장 환경 | 비고 |
|---|---|---|---|
| Inbound (1번) | 에이전트가 먼저 접근 | Windows, 내부망 노드 | 컨트롤러의 IP/도메인을 알아야 함 |
| Command (2번) | 컨트롤러가 직접 명령 실행 | Docker, 클라우드 | 고급 사용자용 스크립팅 필요 |
| SSH (3번) | 컨트롤러가 먼저 접근 | Linux (가장 추천) | SSH 플러그인 설치 필요 |
| Availability |
|---|
![]() |
Keep this agent online as much as possible : 항상 온라인 상태 유지
Bring this agent online according to a schedule : 스케줄에 따라 온라인으로 전환
Bring this agent online when in demand, and take offline when idle : 필요할 때만 연결하고 한가할 때 연결 해제
Keep this agent online as much as possible를 사용.
이제 옵션을 다 설정했으면 저장.
| Jenkins 홈 |
|---|
![]() |
| Agent |
|---|
![]() |
| Cmd |
|---|
![]() |
![]() |
C:\JenkinsTest로 이동하고 복사한 코드를 넣어줬다.| Jenkins 홈 |
|---|
![]() |
그래서 Windows Service로 등록하는 방법이 있다.
| 사진 |
|---|
![]() |
| 사진 |
|---|
![]() |
| 사진 |
|---|
![]() |
<service>
<id>jenkins-agent2</id>
<name>Jenkins Agent2</name>
<description>This service runs a Jenkins agent for distributed builds.</description>
<executable>java</executable>
<arguments>-jar agent.jar -url http://localhost:8080/ -secret 8f881e9159708deca9e7bc45b37033b721acdc74d942b668be41534bf8b69f05 -name "build_agent" -webSocket -workDir "C:\JenkinsTest"</arguments>
<log mode="roll"></log>
</service>
| 서비스창 |
|---|
![]() |
![]() |
| 확인 |
|---|
![]() |