본문 바로가기
IT/개발환경

Jenkins로 AKS CI/CD 구축 2/2 - Agent 구성

by rapker 2023. 4. 10.
반응형

Jenkins로 AKS CI/CD 구축 1/2 - Jenkins 구성의 연장 되는 내용입니다.

 

Jenkins를 단일 머신으로 사용하다가 컴퓨팅 파워가 부족할때 여러대의 jenkins 머신을 추가하고 job 단위로 분리해서 사용할 수 있습니다.

 

여러개의 단일 Jenkins 머신을 사용하게 되면 어느 머신에서 어떤 Job이 동작 중이고 오류가 있었는지 한눈에 모니터링 하기 불편한 점이 있습니다.

 

Jenkins에서는 Master/Slave개념이 지원되며 Master에서 모든 Slave 노드들의 빌드 상태를 파악할 수 있고 특정 Slave에 빌드 요청을 할 수 있습니다.

 

Master에 설정되어 있는 Job의 task 내용을 Slave로 전달하여 Slave의 컴퓨팅 자원을 사용해 빌드가 진행되는 방식입니다.

 

Master가 될 머신에 Jenkins를 구축하고 Job과 Job의 task들을 구성하게 되며, Slave 머신들에

Jenkins를 설치하지 않아도 됩니다.

 

다만 Master 머신의 Job에 설정된 CI/CD에 실행되어야 할 요소들(JVM, Docker, Kubectl, 등)은 설치가 필요합니다.

Jenkins에서 Slave 가 Agent로 이름이 변경 되었다고 합니다.

 

Agent에 연결을 구성하는 방식에는 SSH, JNLP 방식이 있습니다.

  • SSH (Secure Shell)
  • JNLP (Java Network Launch Protocol)

JNLP는 Agent 연결 방식 중 Java Web Start로 구성할 때 가장 많이 사용되는 이라고 합니다.

SSH 방식이 좀 더 설정이 용이한 것으로 보여져서 SSH 방식으로 구성하는 방법을 정리 했습니다.


Slave VM 설정

Slave로 사용할 VM 이 필요합니다. (ubuntu 18.04 LTS)

 

#Java 패키지 설치

sudo apt-get update
sudo apt-get install default-jdk

 

#kubectl 설치

curl -LO "<https://dl.k8s.io/release/$>(curl -L -s <https://dl.k8s.io/release/stable.txt>)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

 

#AZ CLI 설치

curl -sL <https://aka.ms/InstallAzureCLIDeb> | sudo bash

 

#도커 설치

간편설치 방법으로 도커를 설치 합니다.

curl -fsSL <https://get.docker.com> -o get-docker.sh
sudo sh get-docker.sh

 

#도커 관리자 그룹에 사용자 추가

sudo usermod -aG docker $USER
sudo reboot

ubuntu 가 리부팅 되므로 다시 ssh로 ubuntu에 접속

 

#docker-compose 설치

샘플 코드가 docker-compose를 사용하도록 되어 있어 이미지 빌드 시 필요합니다.

sudo apt-get install docker-compose

 

#docker login에 필요한 라이브러리 추가 설치

jenkins 에서 docker login을 실행 할 때 아래와 같은 오류가 출력되는 경우가 있어서 미리 설치해 줍니다.

sudo apt install gnupg2 pass

오류 내용

  • Cannot autolaunch D-Bus without X11 $DISPLAY

 

aks 자격증명 얻기

#azure login

az login

위 명령어 입력 후 출력된 URL을 복사하고

 

브라우저에서 복사한 URL로 이동하여 code를 붙여넣 고 로그인을 진행합니다.

 

#여러개의 구독을 갖고 있는 경우 aks 클러스터가 있는 구독으로 기본 구독을 설정합니다.

구독 목록 확인

az account list -o table

기본 구독 설정

az account set --subscription <구독이름>

 

#자격증명 얻기

az aks get-credentials -g rgAKS -n aksTest998

 

 

Master Jenkins에서 Slave Node 추가

 

 

node 설정 (여기가 제일 중요 합니다.)

 

Remote root directory

slave vm에 master jenkins가 사용할 쓰기 권한이 있는 디렉터리가 필요합니다.

이 디렉터리는 jenkins workspace로 사용됩니다.

sudo mkdir /var/jenkins-slave
sudo chmod 777 /var/jenkins-slave

 

Launch method

Master와 Slave를 연결하는 방식이 SSH, JNLP 방식이 있는데 SSH 방식으로 사용합니다.

빨간 영역들 설정 후 Credentials 부분의 Add버튼을 클릭 합니다.

(Slave VM에 ssh로 접속할 때 사용될 계정 정보가 필요합니다.)

 

credentials

Slave VM에 ssh로 접속할 때 사용되는 계정 정보를 입력해 줍니다.

 

추가 된 자격 증명 선택하고

 

고급 버튼을 클릭 합니다.

 

ssh 기본 포트인 22 그대로 사용할 거라 변경할 필요 없고, Slave VM에 설치된 JavaPath 를 설정 합니다.

 

Java Path 확인

slave vm에 설치된 java 실행파일의 경로가 필요합니다.

which java

 

여기까지 설정 후 페이지 하단의 Save 버튼을 클릭 합니다.

 

노드 목록에 추가된 노드가 보여지구요, 빨간색 X 표시가 되어 있는것은 아직 연결이 안되어 있다는 표시 입니다.

몇 초정도 페이지 갱신을 해주다 보면 빨간색 X표시가 사라집니다.

 

 

빨간색 X가 없어지지 않는다면 확인해 볼만한 항목

  • slave vm의 ssh 자격증명
  • master에서 사용 할 slave vm의 workspace 디렉터리 존재 or 권한
  • slave vm에 설치된 JavaPath 설정

Jenkins 서버의 메인 페이지로 돌아가면 아래처럼 두개의 Node가 보여지게 됩니다.

 

저장 후 azure-vote의 빌드를 실행 하면

master node에서 빌드가 진행되는것을 확인할 수 있습니다.

 

자~ 조금 더 재미 있게 azure-vote job을 복사를 해보겠습니다.

jenkins 메인 화면에서 새로운 Item 클릭

 

#job 복사

  • job 이름 입력하고
  • 페이지 하단의 copy from에 원본 job 이름(azure-vote)을 입력 하고
  • OK버튼을 클릭합니다.

 

복사된 job의 설정에서 빌드가 실행될 node를 slave로 지정해 줍니다.

 

모든 설정은 완료 되었구요 선택된 노드에서 빌드가 진행 되는지 확인 해봅니다.

 

빌드 시간이 워낙 짧아서 순발력이 조금 필요 한데요...

jenkins 메인 페이지에서 두개의 job을 연달아 실행 시킨 후 페이지 갱신을 하면 아래처럼 각각 진행되는것을 확인할 수 있습니다.

반응형
LIST