mingming

jenkins on kubernetes 본문

DevOps

jenkins on kubernetes

mingming_96 2023. 9. 10. 00:29

Jenkins

https://serverascode.com/2022/12/22/jenkins-kubernetes-plugin-agent.html

 

젠킨스(Jenkins) 란?

 
Jenkins는 지속적인 통합 ( Continuous Integration, CI ) 및 지속적인 전달 ( Continuos Delivery, CD ) 프로세스를 자동화하고 관리하기 위한 오픈소스 자동화 도구 입니다. 애플리케이션의 개발, 테스트 및 배포 과정을 효율적으로 관리하고 자동화하는 데 사용됩니다.
 

주요 기능 

 
자동 빌드 
코드 변경이 발생하면 Jenkins는 자동으로 소스 코드를 가져와 컴파일하고 빌드합니다. 
 
자동 테스트
빌드 후에 Jenkins는 자동으로 테스트를 실행하여 코드의 품질과 안정성을 확인합니다. 
 
자동 배포 
테스트가 성공적으로 완료되면 Jenkins는 애플리케이션을 특정 환경으로 배포하거나 스테이징 및 프로덕션 환경으로 배포 프로세스를 자동화할 수 있습니다.
 
스케줄링 및 이벤트 기반 실행 
Jenkins는 정기적으로 자겅ㅂ을 실행하거나 코드 저장소에 변경 사항이 발생할 때 작업을 트리거할 수 있습니다. 
 
프로그래밍 가능한 확장성 
Jenkins는 다양한 플러그인을 지원하므로 사용자 정의 빌드 및 배포 프로세스를 만들 수 있습니다. 
 

사전 준비 사항

앞서 Vagrant로 구성한 Vanila Kubernetes Cluster 환경에서 실습을 진행했습니다. 외부에서 접근하기 위해 Metal LB 또한 설치해 두었습니다.
 
https://mingming-96.tistory.com/30

Vagrant로 kubernetes Cluster 구축하기

Vagrant Vagrant는 가상 개발 환경을 관리하고 구축하기 위한 오픈 소스 소프트웨어 입니다. Vagrant를 사용해 VirtualBox , VMware등 가상 개발 환경을 프로비저닝할 수 있습니다. Vagrant 장점 1. 일관성 유지

mingming-96.tistory.com

 
https://mingming-96.tistory.com/26

kubernets Metal LB 설치하기

Metal LB AWS, GCP , AZURE 등 Cloud 플랫폼에서 자체적인 로드밸런서를 제공해주지만 온프레미스 클러스터에선 로드밸런싱 기능을 제공하는 패키지 설치가 추가로 필요합니다. MetalLB 설치 가이드 Mode La

mingming-96.tistory.com

 

NFS Server

먼저 Jenkins에 사용할 Persistent Volume을 생성해 주어야 합니다 . nfs server를 구성해 PV를 생성해 줍니다. 
 
nfs-server install

sudo apt install -y nfs-server

mount directory 생성

mkdir -p /nfs_shared/jenkins
chmod 755 /nfs_shared/jenkins

 
vim /etc/exports

/nfs_shared/jenkins 192.168.45.0/24(rw,sync,no_subtree_check)

 
jenkins-pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: jenkins-pv
spec:
  capacity:
    storage: 100Mi ## 필요에 맞게 수정
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  nfs:
    server: 192.168.45.240
    path: /nfs_shared/jenkins

 

Jenkins Install

Jenkins repo add 

helm repo add jenkins https://charts.jenkins.io
helm repo update

 
jenkins-values.yaml
values.yaml 파일은 helm chart 패키지 설정을 정의하는데 사용됩니다.  아래의 명령어로 values.yaml 파일을 불러옵니다.

helm show values jenkins/jenkins > jenkins-values.yaml

 
vi jenkins-values.yaml

838 persistence:
839   enabled: true
840   ## A manually managed Persistent Volume and Claim
841   ## Requires persistence.enabled: true
842   ## If defined, PVC must be created manually before volume will be bound
843   existingClaim:
844   ## jenkins data Persistent Volume Storage Class
845   ## If defined, storageClassName: <storageClass>
846   ## If set to "-", storageClassName: "", which disables dynamic provisioning
847   ## If undefined (the default) or set to null, no storageClassName spec is
848   ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
849   ##   GKE, AWS & OpenStack)
850   ##
851   annotations: {}
852   labels: {}
853   accessMode: "ReadWriteMany"
854   volumeName: "jenkins-pv"  # 수정할 부분 
855   size: "100Mi"

기존엔 Storage Class를 이용해 PV를 동적으로 생성하게 되어 있지만 미리 생성해둔 PV와 PVC를 연결할 수 있도록 수정 해줍니다.
 
helm install

helm install jenkins jenkins/jenkins -f jenkins-values.yaml

 
배포한 파드와 pvc 가 정상 동작중인지 확인

kubectl get pods 
kubectl get pvc

Jenkins Password

kubectl exec --namespace default -it svc/jenkins -c jenkins -- /bin/cat /run/secrets/additional/chart-admin-password && echo

Password 기록 후 로그인에 사용
 
Jenkins service type
Jenkins 서버를 외부로 노출하기 위해 Service Type을 LoadBalancer 로 바꿔줍니다. 

kubectl patch svc jenkins -p '{"spec": {"type": "LoadBalancer"}}'

접속 테스트

kubectl get svc

EXTERNAL-IP 로 접속해 접근 가능한지 확인
 

위에서 기록해둔 password로 로그인 해 사용할 수 있습니다.