CI/CD 실습 (쿠버네티스) #1. Jenkins 띄우기

snooby·2022년 8월 3일
4

🐳 Docker & K8S

목록 보기
20/51

이전에는 도커로 Jenkins를 구동시켜 CI/CD 파이프라인을 구성해보았다.
이번에는 쿠버네티스로 Jenkins를 통한 CI/CD 파이프라인을 구성해보겠다.

내가 하고자 하는 전반적인 파이프라인은 다음과 같다.

1. volume 생성하기

jenkins에 연결한 volume을 생성합니다.
매번 정보가 날아가서는 안되니! 생성 후 연결해보아요.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jenkins-pvc
  namespace: jenkins
spec:
  storageClassName: jenkins-sc
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 30Gi

다음처럼 잘생성되어 Bound되어있는지 확인합니다.

제가 사용하는 클러스터 환경에서는 pvc를 생성해주면 자동으로 pv를 생성해 바인딩해주므로 pv를 생성하지 않았지만
그렇지 않은 환경인 경우 pv를 꼭 같이 생성해 주어야합니다.

2. Jenkins 설치하기

jenkins는 helm 차트를 사용하여 설치해주도록 하겠습니다.
그러기위해서는 helm 설치가 우선되어야하는데요.
helm이 무엇이고 어떻게 설치하는 지를 여기에 잘 정리해두었으니 참조바랍니다.

본격적으로 jenkins를 설치해봅시다.

jenkins repo 추가

helm chart에 jenkins repo를 추가합니다.

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

jenkins 파일 다운로드

jenkins 설정을 저희 환경에 맞게 수정하기 위해 jenkins의 value.yaml 파일을 내려받도록 하겠습니다.
.tar형식으로 올라가있기때문에 내려받을 때 tar 해제까지 동시에 진행하겠습니다.

mkdir helm_chart && cd helm_chart
helm fetch --untar jenkins/jenkins

내려받은 value.yaml 파일을 저희 원하는 방식으로 일부 수정해보겠습니다.

jenkins value.yaml 파일 수정

저는 아래의 사항을 수정할겁니다.

  1. Ingress 사항 수정
  2. serviceAccount 변경
  3. 볼륨 연결
  1. Ingress 사항 수정
    저는 ClusterIP 기본타임 서비스를 정의하고 Ingress를 통해 외부로 노출시킬 겁니다. (위의 파이프라인 이미지를 보면 이해가 쉽습니다.)

    • enabled: true로 Ingress를 사용할 것임을 표시
    • annotations:
      kubernetes.io/ingress.class: jenkins
      인그래스 노드 그룹 지정하여 연결
    • hostName: jenkins.dev.onkakao.net:
      연결할 호스트 도메인 주소
    • tls:
      • hosts:
        • jenkins.dev.onkakao.net
          secretName: dev-onkakao-net
          호스트 도메인 주소를 https에서도 사용하기위한 설정 및 인증서키값 정의
  2. serviceAccount 변경
    helm chart의 jenkins 기본의 jenkins-sa.yaml을 사용할 것이므로 (clusterRole, ClusterRoleBinding. ServiceAccount) create:false 처리해줍니다.

  3. 볼륨 연결
    Slave Pod가 실행 완료 후 삭제되어도 Slave Pod에서 실행했던 내용이 남을 수 있도록 Slav Pod에도 볼륨을 마운트를 진행합니다.
    workingDir을 /var/jenkins_home로 정의하고 앞서 정의한 pvc로 연결해줍니다.


다음과 같이 value.yaml을 수정하였으면 수정사항을 적용한다.

helm install jenkins ./jenkins 

삭제하기 위해서는 아래를 사용한다.

helm uninstall jenkins -n jenkins

이렇게 생성 시 pod가 생성이 안되고 pending되거나 에러가 뜨면 pod 로그를 보면서 원인을 파악해야합니다.

kubectl logs -f jenkins-0 -c init -n jenkins

원인을 보고 해결하고
만일 로그에 나온 원인이 플러그인 쪽 문제라고 할 경우
value.yaml에서 기본으로 정의한 플러그인이 잘 설치되지 않는 경우이므로 기본 정의 플러그인을 주석 후 실행합니다.

3. Jenkins 접속

인스톨 시 나온대로 저같은 경우 위에서 도메인 주소를 지정했으니
지정한 도메인으로 접속해보겠습니다.

비밀번호는 아래를 실행시키면 나옵니다.

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

id : admin, pwd : 위 명령어 결과

이렇게 helm 차트를 이용하여 생성한 pod에서 Jenkins 도커 컨테이너를 실행함으로써 로컬에 복잡한 설치없이 Jenkins를 띄워보았다.
이제 이어서 다음 포스팅에 Jenkins 설정과 나머지 파이프라인을 설계해 보겠습니다.

profile
데이터를 가치있게 다루고 싶은 개발자 🐥

0개의 댓글