다양한 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 |