Jenkins 1. 워커 노드 등록 및 키 설정
Jenkins 1. 워커 노드 등록 및 키 설정 — #개발자의도구들 #Jenkins #젠킨스 #jenkins설치 #JenkinsCredential #JenkinsWorker #젠킨스키설정 ...
#개발자의도구들 #Jenkins #젠킨스 #jenkins설치 #JenkinsCredential #JenkinsWorker #젠킨스키설정
AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다
\* 현재 Spring x 프로젝트를 진행하고 있습니다. 전체 목차를 보시려면 여기를 눌러주세요.
\* Devops stack: 여기
\* 리눅스 기본기: 여기
Before
- 사전지식: Jenkins에 대해
- https://m.blog.naver.com/jword\_/223937336844
Jenkins 설치
- VM을 사용한다.
- 직접 Jenkins를 설치하여 운용
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" 페이지를 누르거나 아래 링크로 한번에 이동
🚀 http://[your-vm-ip]:8080/manage/computer/
worker node에 관한 설정들을 등록해주면 됩니다.
- 원리: master node가 원격으로 worker노드를 제어하여 worker노드에서 빌드, 배포 진행
🤔 원격 제어를 위해서 필요한 것? SSH키 !
- SSH키를 Jenkins Credentials 페이지에 등록할 수 있습니다.
🔑 Credential 등록하기
📌 in Master Node
🎯🎯 반드시 jenkins유저로 키를 생성할 것
$ sudo -u jenkins ssh-keygen -t ed25519 -N "" -f /var/lib/jenkins/.ssh/id_ed25519
- 키 저장 위치
📌 공개키
sudo cat /var/lib/jenkins/.ssh/id_ed25519.pub
🔑 개인키
sudo cat /var/lib/jenkins/.ssh/id_ed25519
여기서 📌공개키를 워커노드에 배포해줘야 한다.
nano ~/.ssh/authorized_keys
👉 여기에 master의 공개키를 입력
👉 이제 master → woreker로 접속시 비밀번호를 입력할 필요가 없다!
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은 위에서 만든 것으로
결과
[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" 페이지를 누르거나 아래 링크로 한번에 이동
🚀 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키를 발급 후 등록해야 올바르게 등록가능!






