인프라

[Jenkins] Jenkins 빌드 머신 설정 하기

하루이2222 2025. 6. 14. 16:38

Jenkins Agent 설정 (Agent.jar)

구조

  • Master ← Agent 연결: Agent 노드가 Master로 접속을 시작하는 방식.
  • Inbound Agent: SSH 방식과 달리 Agent 노드에 Inbound Port를 열 필요가 없음.
    • → 방화벽 설정이 Agent 노드에 필요 없어 구성이 용이함.

전제 조건

  • Agent 노드 OS: Linux (Ubuntu/Debian 기반 예시)
  • Java (JRE) 설치: Agent 프로그램 실행을 위해 JRE가 필요함.
# JRE 설치 (예: OpenJDK 21)
sudo apt-get update
sudo apt-get install -y openjdk-21-jre

연결 절차 (임시)

Jenkins UI (노드 관리 -> 신규 노드)에서 제공하는 명령어를 기반으로 Agent 노드에서 직접 실행했음.

1. 작업 디렉터리 생성

# -workDir 파라미터에 지정할 경로 생성
sudo mkdir -p /home/jenkins-build
# Agent 실행 유저에게 소유권 부여
sudo chown ${USER}:${USER} /home/jenkins-build

2. 에이전트 실행

# 에이전트 파일을 저장할 경로로 이동 (예: 홈 디렉터리)
cd ~

# Secret Key 파일 생성
echo <SECRET_KEY> > secret-file

# Agent.jar 다운로드
# <JENKINS_URL>은 실제 Jenkins 마스터 주소로 변경 (예: http://192.168.0.10:8080)
curl -sO <JENKINS_URL>/jnlpJars/agent.jar

# Agent 실행
java -jar agent.jar -url <JENKINS_URL>/ -secret @secret-file -name <AGENT_NAME> -webSocket -workDir "/home/jenkins-build"

→ 실행 후 INFO: Connected 로그가 확인되면 임시 연결에 성공한 것임.

영구 연결 (Systemd 서비스 등록)

문제점

  • → 터미널 세션이 종료되면 Agent 프로세스도 함께 종료됨.
  • → 서버 재부팅 시 수동으로 재실행해야 함.

해결책

  • systemd 서비스를 생성하여 Agent 프로세스를 영구적으로 관리함.

1. 서비스 파일 생성

sudo nano /etc/systemd/system/jenkins-agent.service

2. 서비스 내용 작성

[Unit]
Description=Jenkins Agent
After=network.target

[Service]
# Agent를 실행할 사용자 계정
User=ubuntu

# agent.jar와 secret-file이 위치한 경로
WorkingDirectory=/home/ubuntu

# Agent 실행 명령어 (java는 절대 경로로 지정)
ExecStart=/usr/bin/java -jar agent.jar -url <JENKINS_URL>/ -secret @secret-file -name <AGENT_NAME> -webSocket -workDir "/home/jenkins-build"

# 서비스 실패 시 항상 재시작
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

3. 서비스 적용 및 시작

# 서비스 파일 변경사항 적용
sudo systemctl daemon-reload

# 서비스 활성화 및 즉시 시작
sudo systemctl enable --now jenkins-agent.service

# 서비스 상태 확인
sudo systemctl status jenkins-agent.service

Active: active (running) 상태가 확인되면 영구 연결에 성공한 것임.