DevOps & Cloud발행일 2025. 9. 5.원본 https://blog.naver.com/jword_/223996603518 ↗

Jenkins 1. 워커 노드 등록 및 키 설정

Jenkins 1. 워커 노드 등록 및 키 설정 — #개발자의도구들 #Jenkins #젠킨스 #jenkins설치 #JenkinsCredential #JenkinsWorker #젠킨스키설정 ...

#DevOps/cloudOps#Naver Blog

#개발자의도구들 #Jenkins #젠킨스 #jenkins설치 #JenkinsCredential #JenkinsWorker #젠킨스키설정

​

AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다

\* 현재 Spring x 프로젝트를 진행하고 있습니다. 전체 목차를 보시려면 여기를 눌러주세요.

\* Devops stack: 여기

\* 리눅스 기본기: 여기

Before

Jenkins 설치

  • VM을 사용한다.
  • 직접 Jenkins를 설치하여 운용

​

javascript 코드 예제

sudo apt update
sudo apt install jenkins -y

// start
sudo systemctl start jenkins
sudo systemctl enable jenkins

// in web
http://[host ip]:8080 // vm의 ip

// 초기 ID: admin
// 초기 관리자 비밀 번호 확인
sudo cat /var/lib/jenkins/secrets/initialAdminPassword

// jenkins가 켜져있는지 확인하기
systemctl status jenkins

이미지

  • Jenkins의 기본동작 구조

​

참고로 방금 설치한 부분은 mster 노드입니다. pipeline 및 worker 노드는 내부에서 설정할 것 입니다.

​

Jenkins 명령어를 사용해서 내부 설정을 직접 변경해도 되겠지만, 보통은 이런 오픈소스 프로젝트는 클라이언트를 함께 제공하므로, local 윈도우/맥 브라우저에서 직접 접속하는 것이 낫습니다.

Worker Node 등록하기(1)

👉Jekins에서 "Jenkins관리"-:"Nodes" 페이지를 누르거나 아래 링크로 한번에 이동

javascript 코드 예제
                                    🚀 http://[your-vm-ip]:8080/manage/computer/

worker node에 관한 설정들을 등록해주면 됩니다.

  • 원리: master node가 원격으로 worker노드를 제어하여 worker노드에서 빌드, 배포 진행

​

🤔 원격 제어를 위해서 필요한 것? SSH키 !

  • SSH키를 Jenkins Credentials 페이지에 등록할 수 있습니다.

​

​

🔑 Credential 등록하기

javascript 코드 예제
                                    📌 in Master Node
🎯🎯 반드시 jenkins유저로 키를 생성할 것
$ sudo -u jenkins ssh-keygen -t ed25519 -N "" -f /var/lib/jenkins/.ssh/id_ed25519
  • 키 저장 위치
javascript 코드 예제
                                    📌 공개키
sudo cat /var/lib/jenkins/.ssh/id_ed25519.pub

🔑 개인키
sudo cat /var/lib/jenkins/.ssh/id_ed25519

여기서 📌공개키를 워커노드에 배포해줘야 한다.

javascript 코드 예제
                                    nano ~/.ssh/authorized_keys
👉 여기에 master의 공개키를 입력

​

👉 이제 master → woreker로 접속시 비밀번호를 입력할 필요가 없다!

javascript 코드 예제
                                     sudo -u jenkins ssh -i /var/lib/jenkins/.ssh/id_ed25519 worker@192.168.0.14
  • jenkins유저의 private key를 사용하는 경우에만
  • 다른 유저면 : 비밀번호 요구된다.
  • 이 private key를 jenkins가 사용하도록 등록해줘야 한다.

​

이미지

이미지

  • credential-system-global 에서 add credentials 클릭
  • SSH username with Private key 클릭
  • ID, Description은 알아서
  • username은 ssh에 로그인할 username
  • 📌 Private key는 반드시 ----BEGIN---- ~ ---END--- 까지 끝까지 넣기

​

Worker Node 등록하기(2)

등록한 Credential을 사용하여 다음과 같이 Node를 등록합니다.

이미지

  • 📌 Host에 IP 넣기
  • Credential은 위에서 만든 것으로

결과

javascript 코드 예제
                                    [09/05/25 07:30:38] [SSH] SSH host key matches key in Known Hosts file. Connection will be allowed.
[09/05/25 07:30:39] [SSH] Authentication successful.

[09/05/25 07:30:39] [SSH] Starting agent process: cd "/home/worker" && java  -jar remoting.jar -workDir /home/worker -jar-cache /home/worker/remoting/jarCache
bash: line 1: java: command not found

인증은 성공적이게 완료되었으나 java 명령어를 찾을 수 없다는 에러 발견

​

🤔 왜 이런 오류가 나오는가?

👉 jenkins는 ssh연결 후 java 명령어를 실행함

​

🧠 Jenkins의 SSH agent 방식 흐름:

  • Jenkins Master는 SSH로 Worker 노드에 접속
  • 접속 후, Worker 노드의 홈 디렉토리에 remoting.jar (Jenkins 에이전트 JAR 파일)을 업로드
  • 업로드된 remoting.jar를 java -jar remoting.jar 명령어로 실행
  • Worker 노드는 remoting.jar를 실행하면서 Master와 연결된 Jenkins Agent로 작동

​

​

고로 초기 build 노드를 지정할 때는 jvm을 미리 설치해줘야 합니다.

​

최종

이미지

worker와 잘 연결된 것을 볼 수 있습니다.

Trouble Shooting

❌ Jenkins에 웹으로 접속하는데 오래 걸리는 오류

  • hotspot 사용하여 노트북으로 접속할 때, 내 위치에 따라 지속적으로 IP가 변경됩니다. 이때 jenkins 설정에서 IP변경해줘야 연결이 원활히 진행됩니다.

​

👉 Jekins에서 "Jenkins관리"-"system" 페이지를 누르거나 아래 링크로 한번에 이동

javascript 코드 예제
                                    🚀 http://[your-vm-ip]:8080/manage/configure

이미지

이미지

  • 아래 Jenkins Location에 새로운 IP로 등록

​

🚀 개선 반응속도 한 동작에 20초 -> 1초이내

​

​

❌ Worker 노드로 SSH 접속이 안되는 이유

  • worker 노드에 ssh 키를 복사하려 했는데 명령어가 실행이 안되고 무한 로딩 상태
  • worker에서 master로는 ssh 접속이 가능함
  • worker에 방화벽도 없고 tcp도 열려있음

​

👉 이건 네트워크 문제, 실습 환경에서는 VM간의 연결을 할 때 둘다 Bridged 모드로 하기

🤔 NAT모드로 하면 안됨 -> 이유는 모르겠음 - 포트포워딩 필요하다. 나중에 해결해 보자.

​

❌ SSH 키를 jenkins 유저 전용으로 재발급

  • 처음에 기본 사용자인 master 유저로 ssh키를 발급 후 등록했었다.
  • 근데 이게 jenkins에서 연결이 안되었다.

​

👉 Jenkins는 기본적으로 Jenkins 유저를 사용함(master 노드에서)

  • 해당 유저에 대한 ssh키를 발급 후 등록해야 올바르게 등록가능!

​