Engineering/DevOps

[CICD] Jenkins 설치하기

망고v 2025. 4. 21. 12:08

다양한 CICD 도구들이 나왔지만, 그럼에도 불구하고 Build 영역에서 굳건히 자리를 차지하고 있는 Jenkins를 Container 환경에 맞게 설치한다.

 

[참고] https://www.jenkins.io/doc/book/installing/kubernetes/

YAML 파일 가져오기.

➜  cicd git clone https://github.com/scriptcamp/kubernetes-jenkins
'kubernetes-jenkins'에 복제합니다...
remote: Enumerating objects: 16, done.
remote: Counting objects: 100% (7/7), done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 16 (delta 1), reused 0 (delta 0), pack-reused 9 (from 1)
오브젝트를 받는 중: 100% (16/16), 완료.
델타를 알아내는 중: 100% (1/1), 완료.

 

Step 1: Namespace 설정

기본 설정인 "devops-tools" 대신 "cicd"로 Namespace를 변경하여 설치한다. (clone한 namespace.yaml skip)

 

 

Step 2: ServiceAccount 생성

serviceAccount.yaml 내용 중 namespace가 기본 설정된 값인 부분을 "cicd"로 치환하고 설치한다.

➜  kubernetes-jenkins (main) ✗ k apply -f ./serviceAccount.yaml -n cicd
clusterrole.rbac.authorization.k8s.io/jenkins-admin unchanged
serviceaccount/jenkins-admin created
clusterrolebinding.rbac.authorization.k8s.io/jenkins-admin configured

 

 

Step 3: Storage 영역 생성

ServiceAccount 생성 때와 동일하게 namespace 값을 치환하고 설치 진행한다. (이 후 Deployment, Service도 동일하게 조치하기.)

➜  kubernetes-jenkins (main) ✗ k apply -f ./volume.yaml -n cicd
storageclass.storage.k8s.io/local-storage created
persistentvolume/jenkins-pv-volume created
persistentvolumeclaim/jenkins-pv-claim created

 

 

Step 4: Deployment 생성

➜  kubernetes-jenkins (main) ✗ k apply -f ./deployment.yaml -n cicd
deployment.apps/jenkins created

 

Jenkins Pod 상태를 확인하니 "Pending" 상태이다. 

➜  kubernetes-jenkins (main) ✗ k get po -n cicd
NAME                                          READY   STATUS    RESTARTS         AGE
...
jenkins-68c8b7f55-rxr9f                       0/1     Pending   0                11m

 

2가지의 문제가 있었는데, Node Affinity의 value를 내 Node에 맞게 수정하지 않은 점과 CPU resource 부족이었다.

  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - worker-node01

 

PersistentVolumeClaim 삭제하고, PersistentVolume 삭제 후 위 value를 내 Node명으로 변경하여 다시 생성해주었고, jenkins Deployment는 resource의 request(CPU)를 500m에서 100m으로 축소시켜 해결했다.

 

 

Step 5: Service 생성

➜  kubernetes-jenkins (main) ✗ k apply -f service.yaml -n cicd
service/jenkins-service created

 

 

점검하기

http://localhost:8080/ 호출시 아래와 같은 화면이 출력된다.

Pod에 접근하여 해당 경로의 String을 입력하면 위 단계를 Skip할 수 있다. (추후 Secret 등으로 관리하기.)

<<K9s-Shell>> Pod: cicd/jenkins-876795db7-4vqmc | Container: jenkins
jenkins@jenkins-876795db7-4vqmc:/$ cat /var/jenkins_home/secrets/initialAdminPassword
f39abec5596d4e2eb242d62d933a8601

 

몇 가지 단계를 거치면 아래와 같이 익숙한 화면을 만날 수 있다. 이제 project를 생성하여 실제 사용해보자.

'Engineering > DevOps' 카테고리의 다른 글

Jenkins 를 통한 SpringBoot Build w/Gradle  (0) 2025.04.22
[형상관리] Gitea repository 생성  (0) 2025.01.07
[minikube] 형상관리(Gitea) 설치  (0) 2025.01.03
Tekton 설치(minikube)  (0) 2024.06.11
Gradle 적용 및 Maven과 비교  (0) 2024.04.25