DevOps와 CI CD

Jenkins를 이용한 CI/CD Pipeline 구축 (1) DevOps와 CI/CD 이해

옴악핫세 2023. 10. 18. 10:42

1. Cloud Native Application의 구성요소

1. Microservices 

Inner Architecture : 도메인에 대해 비즈니스 로직을 개발한 부분

Outer Architecture : Inner 부분이 잘 동작할 수 있도록 지원해주는 서포티드 시스템 (Service Mesh 부분이 가장 중요!)

 

 

 

 

2. Containers : MSA 서비스를 클라우드 환경에서 배포 하기 위해서는 컨테이너 기반으로 배포 관리하는 것이 편리함

그 이유는 수많은 마이크로 서비스 어플리케이션을 가상화 방식이 아니라 실제 서버를 통해 기동하게 하는것은 매우 큰 리소스의 낭비뿐만 아니라 비용을 유발시킴

컨테이너 가상화는 기존의 물리적 서버를 운영하는 것에 비해서 적은 리소스를 사용함

또한 각각의 컨테이너가 함께 사용 할 수 있는 리소스들이 있어서 최소한의 리소스를 통해서 어플리케이션, 미들웨어, OS등을 기동할 수 있음

 

 

 

3. DevOps (Development + Operations) : 개발에서 운영에 이르기까지 필요한 프로세스를 단순화 자동화한 개발 프로세스

개발쪽에서는 변화, 변경에 중점을 맞춰 작업을 하고 운영은 안정성을 위주로 작업을 해야하므로

이 두 요구사항을 유기적으로 통합 할 수 있는 방법론 (문화+프로세스+등...)이 DevOps!

- DevOps 구성 요소

(1) 인프라로 코드 관리, (2) 애자일 인프라 스트럭처, (3) 애자일 시스템 관리, CI/CD  

시스템을 사용할 때 대표적으로 Jenkins를 사용함

 

4. CI/CD (지속적인 통합/지속적인 배포)

https://aws.amazon.com/ko/devops/continuous-integration/

CD (Continuous Delivery) : CI에서 통합된 데이터를 검증하고 최종 배포를 수동하는 하는 작업

CD (Continuous Deployment) : 자동으로 전 과정을 배포하는 작업

jenkins : CI 도구, scm (github)에 저장된 코드를 불러온 다음에 소스코드의 빌드, 테스트, 패키징함

jenkins를 활용하여 CI/CD 파이프 라인 처리를 할 수 있음

 

도커 컨테이너들의 배포 관리, 시스템 관리를 위해서 오케스트레이션 도구인 쿠버네티스를 사용

Ansible과 테라폼은 IaC 구현을 위해 사용

 

Jenkins에서 빌드된 결과물 (자바 기준 war 파일)을 WAS와 도커에 배포

 

그다음으로 아래 그림처럼 쿠버네티스에 까지 배포하는 과정도 진행 예정

 

쿠버네티스에서는 빌드 된 결과물의 컨테이너 관리 작업을 위해서 컨테이너 레지스트리를 사용할 수 있음

물론 우리가 빌드를 한 다음에 해당하는 이미지 파일을 등록할 수 있는 저장소로써 컨테이너 레지스트리를 사용할 것

 

소나큐브는 jenkins를 통해 진행되는 빌드, 테스트, 패키징 과정에서의 데이터를 분석할 수 있음 (jenkins의 플러그인) 

 

위 과정까지는 로컬에서 진행

맨 마지막으로는 아래처럼 클라우드에서도 진행