기타

CI/CD란?

ziwookim 2022. 12. 12. 10:27

CI/CD란?

CI/CD는 애플리케이션 개발 단계를 자동화하여 애플리케이션을 더욱 짧은 주기로 고객에게 제공하는 방법이다. CI/CD의 기본 개념은 지속적인 통합, 지속적인 서비스 제공, 지속적인 배포이다. CI/CD는 새로운 코드 통합으로 인해 개발 및 운영팀에 발생하는 문제(일명 "통합 지옥(integration hell)")를 해결하기 위한 솔루션이다.

특히, CI/CD는 애플리케이션의 통합 및 테스트 단계에서부터 제공 및 배포에 이르는 애플리케이션의 라이프사이클 전체에 걸쳐 지속적인 자동화와 지속적인 모니터링을 제공한다. 이러한 구축사례를 일반적으로 "CI/CD 파이프라인"이라 부르며, 개발 및 운영팀의 애자일 방식 협력을 통해 DevOps 또는 SRE(사이트 신뢰성 엔지니어링) 방식으로 지원된다.

 

CI(Continuous Integration)

CI(Continuous Integration)는 개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)을 의미한다. 지속적인 통합이 제대로 구현되면 애플리케이션 코드의 새로운 변경 사항이 정기적으로 빌드 및 테스트를 거쳐 공유 리포지토리에 병합된다. 따라서 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌하는 문제를 이 방법으로 해결할 수 있다.

 

CD(Continuous Delivery/Deployment)

CD는 지속적인 서비스 제공(Continuous Delivery) 및 지속적인 배포(Continuous Deployment)를 의미하며, 이 두 용어는 상호 교환하여 사용된다. 두 가지 의미 모두 파이프라인의 추가 단계에 대한 자동화를 뜻하지만 때로는 얼마나 많은 자동화가 이루어지고 있는지를 설명하기 위해 별도로 사용되기도 한다.

지속적인 제공(Continuous Delivery)이란 개발자들이 애플리케이션에 적용한 변경 사항이 버그 테스트를 거쳐 리포지토리(예: Github 또는 컨테이너 레지스트리)에 자동으로 업로드 되는 것을 뜻하며, 운영팀은 이 리포지토리에서 애플리케이션을 실시간 프로덕트 환경으로 배포할 수 있다. 이는 개발팀과 비즈니스팀 간의 가시성과 커뮤니케이션 부족 문제를 해결해준다. 그러므로 지속적인 서비스 제공은 최소한의 노력으로 새로운 코드를 배포하는 것을 목표로 한다.

지속적인 배포(Continuous Deployment)란 개발자의 변경 사항을 리포지토리에서 고객이 사용 가능한 프로덕션 환경까지 자동으로 릴리즈하는 것을 의미한다. 이는 애플리케이션 제공 속도를 저해하는 수동 프로세스로 인한 운영팀의 프로세스 과부하 문제를 해결한다. 지속적인 배포는 파이프라인의 다음 단계를 자동화함으로써 지속적인 서비스 제공의 장점을 활용한다.

 

CI/CD 파이프라인

CI/CD 파이프라인은 새 버전의 소프트웨어를 제공하기 위해 수행해야 할 일련의 단계이다. CI/CD 파이프라인은 DevOps 또는 사이트 신뢰성 엔지니어(SRE) 방식을 통해 더 효과적으로 소프트웨어를 제공하는 데 초점을 맞춘 방법이다.

CI/CD 파이프라인은 특히 통합 및 테스트 단계와 제공 및 배포 단계에서 모니터링 및 자동화를 도입하여 애플리케이션 개발 프로세스를 개선한다. CI/CD 파이프라인의 각 단계를 수동으로 실행할 수도 있지만, CI/CD 파이프라인의 진가는 자동화할 때 드러난다.

 

CI/CD 파이프라인 요소

CI/CD 파이프라인의 단계는 각기 다른 태스크 하위 집합으로 이루어져 있는데, 이를 파이프라인 단계(pipeline stage)라고 부른다. 일반적인 파이프라인 단계는 다음과 같다.

  • 빌드(Build) - 애플리케이션을 컴파일하는 단계
  • 테스트(Test) - 코드를 테스트하는 단계. 이 단계를 자동화하여 시간과 수고를 줄일 수 있다.
  • 릴리스(Release) - 애플리케이션을 리포지토리에 제공하는 단계
  • 배포(Deploy) - 코드를 프로덕션에 배포하는 단계
  • 검증 및 컴플라이언스(Validation & compliance) - 빌드 검증 단계는 해당 조직의 필요에 따라 결정된다. Clair와 같은 이미지 보안 스캔 툴을 사용하여 알려진 취약점(CVE)과 비교하는 방법으로 이미지의 품질을 보장할 수 있다.

 

 

 

일반적인 CI/CD 툴

CI/CD 툴은 팀이 개발, 배포, 테스트를 자동화하도록 지원한다. 특히 통합(CI) 측면을 다루는 툴도 있고, 개발 및 배포(CD)를 관리하는 툴도 있으며, 지속적인 테스트 또는 관련 기능에 특화된 툴도 있다.

CI/CD와 관련해 가장 널리 알려진 오픈소스 툴은 Jenkins 자동화 서버다. Jenkins는 간단한 CI 서버에서 완전한 CD 허브에 이르는 모든 것을 처리할 수 있게 설계되었다.

Tekton Pipelines는 표준 클라우드 네이티브 CI/CD 경험과 컨테이너를 제공하는 쿠버네티스 플랫폼을 위한 CI/CD 프레임워크이다.

Jenkins 및 Tekton Pipelines 외에도 알아둘 만한 다른 오픈소스 CI/CD 툴은 다음과 같다.

또한 다양한 벤더가 제공하는 관리형 CI/CD 툴도 있다. 주요 퍼블릭 클라우드 공급업체는 모두 GitLab, CircleCI, Travis CI, Atlassian Bamboo 등과 함께 CI/CD 솔루션을 제공한다.

뿐만 아니라 DevOps의 기본 툴은 CI/CD 프로세스에 속해 있을 가능성이 높다. 구성 자동화(예: Ansible, Chef, Puppet), 컨테이너 런타임(예: Docker, rkt, cri-o), 컨테이너 오케스트레이션(쿠버네티스)을 위한 툴은 엄밀하게는 CI/CD 툴이 아니지만 많은 CI/CD 워크플로우에 표시된다.

 

출처: https://www.redhat.com/ko/topics/devops/what-is-ci-cd

 

CI/CD(지속적 통합/지속적 제공): 개념, 방법, 장점, 구현 과정

CI/CD는 애플리케이션의 통합 및 테스트부터 제공 및 배포까지 전체 라이프사이클에서 지속적인 자동화와 모니터링을 제공합니다. 개념, 차이점, 학습방법(인강)을 보세요.

www.redhat.com