[DevOps] Jenkins를 이용한 CI/CD Pipeline 구축 - Advenced Jenkins 사용 ③ - Multi Node 구성하기

2022. 9. 16. 04:07System 작업실/DevOps

728x90
반응형

 

 

 

이 내용은 인프런 - Jenkins를 이용한 CI/CD Pipeline 구축 강의를 보고 정리한 내용 입니다.


해당 내용의 Code 내용은 이 곳에서 확인하실 수 있습니다.






🗂 목차

 [DevOps] Jenkins를 이용한 CI/CD Pipeline 구축 - 자동화 도구의 사용
● [DevOps] Jenkins를 이용한 CI/CD Pipeline 구축 - Jenkins + Infrastructure as Code 와의 연동
● [DevOps] Jenkins를 이용한 CI/CD Pipeline 구축 - Jenkins + Ansible + Kubernetes 와의 연동
● [DevOps] Jenkins를 이용한 CI/CD Pipeline 구축 - Advenced Jenkins 사용 ① - Pipeline
● [DevOps] Jenkins를 이용한 CI/CD Pipeline 구축 - Advenced Jenkins 사용 ② - SonarQube
● [DevOps] Jenkins를 이용한 CI/CD Pipeline 구축 - Advenced Jenkins 사용 ③ - Multi Nodes
● [DevOps] Jenkins를 이용한 CI/CD Pipeline 구축 - 상용 클라우드 환경에 배포하기
 [DevOps] Jenkins를 이용한 CI/CD Pipeline 구축 - 부록


 






🚀 Jenkins Master와 Slave 나누기

   🔽 Jenkins 좀 더 알아보기

        📦 Multi Node 구성

Jenkins에 Worcker Node를 추가하여 Master Node가 가지고 있는 작업을 분할하는 환경 구축을 해 볼것이에요.

💡 참고 사항

1. Jenkins Slave란?

  ∙ Remote에서 실행되는 Jenkins 실행 Node.
  ∙ Jenkins Master의 요청 처리 담당.
  ∙ Master로부터 전달된 Job 실행.
  ∙ 다양한 운영체제에서 실행 가능.
  ∙ Jenkins Project 생성 시 특정 Slave 선택 실행 가능.

 

https://digitalvarys.com/how-to-configure-jenkins-master-slave-setup/



최초 Slave용 Docker Container를 구성해 볼게요.

주니하랑은 Synology NAS에 Docker를 이용하고 있어요.


sudo docker run --privileged --name jenkinds-test-node1 -itd -p 40022:22 -e dontainer=docker -v /sys/fs/cgroup:/sys/fs/cgroup --cgroupns=host edowon0623/docker:latest /usr/sbin/init

반응형



만약 M1 Mac Book의 Docker Desktop을 이용하신다면 아래 명령어를 이용해 주세요.

sudo docker run --privileged --name {Container Name} -itd -p {외부 SSH Port 번호}:{내부 SSH Port 번호} -e dontainer=docker -v /sys/fs/cgroup:/sys/fs/cgroup --cgroupns=host edowon0623/docker-server:m1 /usr/sbin/init


현재는 공부용이기 때문에 강사님이 만들어 놓으신 기본 Linux(CenOS 7) Docker Image를 이용하여
Directory 작업과 Port Fowarding을 진행했으나, 실제 운영 환경 등에서는 다른 Image를 쓰는 걸 추천합니다.

 

💡 참고 사항

Slave를 등록할 때는 아래 방법을 이용해요.

Jenkins 관리 -> Manage Nodes -> New Node

1. Node Name : slave1

2. Description : Add a server as a slave machine

  ∙ 해당 연결에 대한 설명 정의

3. Number of executors : 5

  ∙ Master로 부터 작업 처리에 대한 요청을 받았을 때, 동시에 처리할 수 있는 최대 작업 개수 명시.

4. Remote root directory : /root/slave1

  ∙ Work Space 결과를 저장할 Directory Path 설정

5. Labels : slave1

6. Usage : Use this node as much as possible

  ∙ Master가 Slave에게 작업을 위임할 때 어떤 기준으로 Slave Node를 선택하게 할 것인지 정의. 


7. Launch Method : Launch agents via SSH

  ∙ Host : {Slave Server IP} 예시:) 192.168.0.5
  ∙ Port : 22 (Slave SSH Port Number)
  ∙ Credntials : root/P@ssw0rd (Slave root Password)


Slave 설치 방법과 Master와 Slave 연결 방법에 대해서는 이 곳에 정성스럽게 정리해 두었어요.








        📦 연동 Test Build


위 Project에 설정을 만져 Test를 진행해 볼게요.


Project 구성 -> General


위에서 'Restrict where this project can be run'을 활성화 해줄게요.



Label Expression에 Slave를 만들 때, 등록했던 Label 이름을 적어주세요.

이렇게 해주면 이 전에 만들었던 Slave Server에다가만 해당 Project의 Build 작업을 위임하겠다는 것이에요.

저장하고, Build를 진행해 볼게요.

 

 


Build가 완료되고, Slave Server에서 지정했던 Directory를 확인해보니
workspace라는 Directory가 생긴걸 확인할 수 있어요.




주니하랑이 Build한 Project가 전달된 것을 확인할 수 있어요.

 

 

 

 

        📦 Slave Node에서 Pipeline Build

최초 N개의 Node Test를 위해 Slave Node를 하나 더 만들게요.
Node를 만드는 방법은 이 곳에 준비해 두었어요.


sudo docker run --privileged --name {Container Name} -itd -p {외부 SSH Port 번호}:{내부 SSH Port 번호} -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup --cgroupns=host edowon0623/docker:latest /usr/sbin/init
728x90


이번에 주니하랑은 위의 명령어를 이용해서 Node2를 만들어 주었어요.


만약 M1 Mac Book의 Docker Desktop을 이용하신다면 아래 명령어를 이용해 주세요.

sudo docker run --privileged --name {Container Name} -itd -p {외부 SSH Port 번호}:{내부 SSH Port 번호} -e dontainer=docker -v /sys/fs/cgroup:/sys/fs/cgroup --cgroupns=host edowon0623/docker-server:m1 /usr/sbin/init

 



 

주니하랑은 이 전에 작업했었던 위 Project에서 추가로 작업을 해 볼 것이에요.



상단에 agnet 부분이 원래 any 였었는데, 위와 같이 testSlave1에서 작동하도록 수정해 주었어요.

 

 

 

 

 

 

 

 

728x90
반응형