이전에는 도커로 Jenkins를 구동시켜 CI/CD 파이프라인을 구성해보았다.
이번에는 쿠버네티스로 Jenkins를 통한 CI/CD 파이프라인을 구성해보겠다.
내가 하고자 하는 전반적인 파이프라인은 다음과 같다.
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를 꼭 같이 생성해 주어야합니다.
jenkins는 helm 차트를 사용하여 설치해주도록 하겠습니다.
그러기위해서는 helm 설치가 우선되어야하는데요.
helm이 무엇이고 어떻게 설치하는 지를 여기에 잘 정리해두었으니 참조바랍니다.
본격적으로 jenkins를 설치해봅시다.
helm chart에 jenkins repo를 추가합니다.
helm repo add jenkinsci https://charts.jenkins.io
helm repo update
jenkins 설정을 저희 환경에 맞게 수정하기 위해 jenkins의 value.yaml 파일을 내려받도록 하겠습니다.
.tar형식으로 올라가있기때문에 내려받을 때 tar 해제까지 동시에 진행하겠습니다.
mkdir helm_chart && cd helm_chart
helm fetch --untar jenkins/jenkins
내려받은 value.yaml 파일을 저희 원하는 방식으로 일부 수정해보겠습니다.
저는 아래의 사항을 수정할겁니다.
- Ingress 사항 수정
- serviceAccount 변경
- 볼륨 연결
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에서도 사용하기위한 설정 및 인증서키값 정의
serviceAccount 변경
helm chart의 jenkins 기본의 jenkins-sa.yaml을 사용할 것이므로 (clusterRole, ClusterRoleBinding. ServiceAccount) create:false 처리해줍니다.
볼륨 연결
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에서 기본으로 정의한 플러그인이 잘 설치되지 않는 경우이므로 기본 정의 플러그인을 주석 후 실행합니다.
인스톨 시 나온대로 저같은 경우 위에서 도메인 주소를 지정했으니
지정한 도메인으로 접속해보겠습니다.
비밀번호는 아래를 실행시키면 나옵니다.
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 설정과 나머지 파이프라인을 설계해 보겠습니다.