CI/CD
CI
- 코드를 커밋하고 빌드 했을 때 정상적으로 작동하는지 반복적으로 검증해 애플리케이션의 신뢰성을 높이는 작업
CD
- CI과정에서 생성된 신뢰할 수 있는 애플리케이션을 실제 상용환경에 자동으로 배포하는 것을 의미
애플리 케이션 개발 과정에서 CI/CD
- 개발자가 GitHub에 소스를 커밋하고 푸시하면 CI단계로 들어간다.
- CI 단계에서는 애플리케이션이 자동 빌드되고 테스트를 거쳐 배포할 수있는 애플리케이션인지 확인한다.
- 테스트를 통과하면 신뢰할 수 있는 애플리케이션으로 간주하고 CD단계로 넘어간다.
- CD 단계에서는 애플리케이션을 컨테이너 이미지로 만들어서 다양한 오브젝트 조건에 맞춰 미리 설정한 파일을 통해 배포한다.
Jenkins CI/CD
- 애플리케이션을 쿠버네티스에서 사용하는 과정(파이프라인)
docker build
- 깃허브 등 저장소에 저장해둔 애플리케이션 소스 코드를 내려받아 도커 컨테이너 이미지로 빌드한다.
docker push
- 빌드한 컨테이너 이미지를 쿠버네티스에서 사용할 수 있도록 레지스트리에 등록한다.
kubectl create
- 레지스트리에 등록된 이미지를 기반으로 쿠버네티스 오브젝트를 생성한다.
kubectl expose
- 생성한 오브젝트(파드/디플로이먼트)를 외부에서 접속할 수 있도록 서비스 형태로 노출
CI/CD 는 변경사항을 계속 추적해 좀 더 안정화된 애플리케이션을 만들고, 이를 배포하는 과정을 자동화해 시스템을 안정적으로 운영하는데 쓰인다.
Jenkins 특징 및 장점
- 사용자가 직접 UI에서 작업을 구성하거나 작업 순서를 코드로 정의할 수 있다.
- 오랜시간동안 많은 사람이 사용하고 있어 정보를 찾기 쉽고 다양한 사용 환경, 언어 및 빌드도구를 연계할 플러그인을 인터넷에서 쉽게 찾을 수 있다.
- 젠킨스는 거의 모든 환경에 사용할 수 있도록 다양한 플러그인을 추가해 원하는 형태를 만드는 블록 방식으로 구성돼 있다.
- 모든 배포 환경을 컨테이너 인프라로 일원화하고, CI/CD 도구를 사용하면 애플리케이션에 맞는 환경을 적용해 자동으로 배포할 수 있다.
- 통합과정에서 만들어진 컨테이너 이미지를 기반으로 쿠버네티스가 존재하는 어떤환경에서도 일관성있는 애플리케이션을 배포할 수있다.
- 소스코드 저장소에 푸시하면, 쿠버네티스 내부에 설치된 젠킨스는 애플리케이션 코드를 빌드하고 레지스트리에 푸시한 후에 쿠버네티스에서 사용 가능한 형태로 배포한다.
- 젠킨스는 작업내용을 아이템 단위로 정의하고 조건에 따라 자동으로 작업을 수행해 효율을 높이고 실수를 줄인다.
- 젠킨스는 컨트롤러와 에이전트 형태로 구성한 다음 배포해야 하며 여기에 필요한 설정을 모두 넣어야 한다.
- 구성환경에 따라 많은 부분을 동적으로 변경해야 하는데, 동적인 변경사항을 간편하고 빠르게 저용할 수있게 도와 주는 도구로 커스터마이즈와 헬름이 있다.