[Jenkins] 지속적 통합과 배포 자동화, 젠킨스
5 지속적 통합과 배포 자동화, 젠킨스
- 4장에서 진행한 과정을
파이프라인
이라고 한다. - 자동화는 크게
지속적 통합(CI)
,지속적 배포(CD)
2가지로 정의 된다.
5.1 컨테이너 인프라 환경에서 CI/CD
-
컨테이너 인프라 환경에서는 주로
CD
를 강조하지만CI
와CD
는 함께 사용되기 때문에 개념을 정확히 이해하는 것이 중요하다. -
인프라 관점에서 정리한다면, 개발자가 소스를 커밋하고 푸시하면 CI 단계로 들어 가게 되고, 자동 빌드 되고 테스트를 거쳐 배포할 수 있는 애플리케이션인지 검증을 거치면 CD 단계로 넘어간다, CD단계에서는 애플리케이션을 컨테이너 이미지로 만들어서 파드, 디플로이먼트, 스테이트풀셋 등 다양한 오브젝트 조건에 맞춰 배포 된다.
5.1.1 CI/CD 도구 비교
- 팀시티
- 코틀린 기반으로, 에이전트 3개와 빌드 작업 100개를 무료로 사용할 수 있으며, 이후는 유료 결제를 해야 한다.
- 깃허브 액션
- 깃허브에서 지원하는 워크플로 기반의 도구이다. 한달에 2,000분 제한 시간이 있으며, 추가로 사용할 경우 분 단위의 요금이 부과 된다.
- 뱀부
- 아틀라시안에서 만든 도구로, 유료이며, 사용자 서버에 설치해 사용한다. 아틀라시안에서 만든 다른 협업 도구를 사용 중이라면 같이 사용하기 좋다.
- 젠킨스
- 오픈 소스 도구로, 사용자가 직접 UI에서 작업을 구성하거나 코드로 정의할 수 있다.
- 오랜 시간 동안 사용되어 CI/CD 도구의 대명사라 해도 될 정도이다.
- 사용자 수가 많아 정보를 찾기 쉽고 활용 방법과 플러그인 개발 등 쉽게 찾을 수 있다.
- 따라서 젠킨스로 ㄱㄱ
젠킨스로 쿠버네티스 운영 환경 개선하기
- 컨테이너 인프라 환경에서 젠킨스를 사용하는 주된 이유는 애플리케이션을 컨테이너로 만들고 배포하는 과정을 자동화 하기 위해서이다.
- 젠킨스는 컨트롤러와 에이전트 형태로 구성한 다음 배포해야 하며, 여기에 필요한 설정을 모두 넣어야 한다.
- 구성 환경에 따라 많은 부분을 동적으로 변경해야 하는데, 동적인 변경 사항을 간편하고 빠르게 적용할 수 있도록 도와주는 도구에는
커스터마이즈
그리고헬름
이 있다.
5.2 젠킨스 설치를 위한 간편화 도구 살펴보기
5.2.1 배포 간편화 도구 비교하기
구분 | 큐브시티엘 | 커스터마이즈 | 헬름 |
---|---|---|---|
설치방법 | 쿠버네티스에 기본 포함 | 별도 실행 파일 또는 쿠버네티스에 통합 | 별도 설치 |
배포 대상 | 정적인 야믈 파일 | 커스터마이즈 파일 | 패키지(차트) |
주 용도 | 오브젝트 관리 및 배포 | 오브젝트의 가변적 배포 | 패키지 단위 오브젝트 배포 및 관리 |
가변적 환경 | 대응 힘듬(야믈 수정 필요) | 간단한 대응 가능 | 복잡한 대응 가능 |
기능 복잡도 | 단순함 | 보통 | 복잡함 |
5.2.2 커스터마이즈로 배포 간편화하기
커스터마이즈의 작동 원리
- 야믈 파일에 정의된 값을 사용자가 원하는 값으로 변경할 수 있다.
# 커스터마이즈로 변경될 작업을 정의
kustomize create --namespace=metallb-system --resources namespace.yaml,metallb.yaml,metallb-12config.yaml
kustomization.yaml
resources:
- namespace.yaml
- metallb.yaml
- metallb-12config.yaml
namespace: metallb-system
# 설치 된 이미지를 안정적인 버전으로 유지하기 위해 이미지 태그를 v0.8.2로 지정
kustomize edit set image metallb/controller:v0.8.2
kustomize edit set image metallb/speaker:v0.8.2
kustomization.yaml
[중략]
images:
- name: metallb/controller
newTag: v0.8.2
- name: metallb/speaker
newTag: v0.8.2
# MetlLB 설치를 위한 매니페스트를 생성
kustomize build
# 빌드한 결과가 바로 kubectl apply에 인자로 전달돼 배포되도록 할수도 있다.
kustomize build | kubectl apply -f -
# MetalLB가 정상 배포 되었는지 확인
kubectl get pods -n metallb-system
kubectl get configmap -n metallb-system
# 디플로이먼트 1개를 배포하여 LB 타입으로 노출하고 IP가 정상적으로 할당 됬는지 확인
kubectl create deployment echo-ip --image=sysnet4admin/echo-ip
kubectl expose deployment echo-ip --type=LoadBalancer --port=80
kubectl get service echo-ip
5.2.3 헬름으로 배포 간편화하기
헬름의 작동 원리
- 쿠버네티스에 패키지를 손쉽게 배포할 수 있도록 패키지를 관리하는 쿠버네티스 전용 패키지 매니저이다.
플랫폼 | 패키지 매니저 | 저장소 | 사용 목적 |
---|---|---|---|
리눅스 | yum, apt | 배포판 저장소 | 소프트웨어 의존성 관리 |
파이썬 | pip | pypi.org | 파이썬 모듈 의존성 관리 |
자바 | maven | mvnrepository.com | 자바 라이브러리의 의존성 관리 |
쿠버네티스 | helm | artifacthub.io | 쿠버네티스 패키지 관리 |
- 다수의 오브젝트 배포 야믈은 파일 구분자인 ‘
---
‘로 묶어 단일 야믈로 작성해 배포할 수 있는 장점이 있다. - 요구 조건별로 리소르를 편집하거나 변수를 넘겨서 처리하는 패키지를 만들 수 있다. 이 패키지는
차트
라고 한다 - 배포한 애플리케이션을 업그레이드하거나 되돌릴 수 있는 기능과 삭제할 수 있는 기능을 제공한다.
# MetalLB 설치를 위해 저장소 등록
helm repo add edu https://iac-source.github.io/helm-charts
# 레포지토리 업데이트
helm repo update
# 설치
helm install metallb edu/metallb \
--namespace=metallb-system \
--crate-namespace \
--set controller.tag=v0.8.3 \
--set speaker.tag=v0.8.3
--set configmap.ipRange=192.168.1.11-192.168.1.29
# 배포 상태 확인
kubectl get pods -n metallb-system
kubectl get configmap -n metallb-system
# 테스트를 위한 디플로이먼트 생성
kubectl create deployment echo-ip --image=sysnet4admin/echo-ip
kubectl expose deployment echo-ip --type=LoadBalancer --port=80
kubectl get service echo-ip