CI / CD

cabbage·2023년 3월 5일
0

기타

목록 보기
17/26

CI / CD

CI / CD는 개발부터 배포까지의 모든 단계들을 자동화하여 효율적이고 빠르게 배포할 수 있도록 하는 것을 말한다.

  • CI는 Continuous Integration(지속적인 통합)의 약자이다.
  • CD는 Continuous Delivery(지속적인 제공) 또는 Deployment(지속적인 배포)의 약자이다.

CI(Continuous Integration, 지속적인 통합)

CI는 버그 수정, 새롭게 개발한 기능들이 주기적으로 빌드되고 테스트되어 메인 리포지토리에 merge되는 것을 말한다.

CI의 중요한 포인트 2가지

1. 코드의 변경사항을 주기적으로 빈번하게 merge해야 한다.

  • 코드를 오랫동안 작성하다가 메인 리포지토리에 merge하면 다른 개발자의 코드와 충돌을 일으킬 가능성이 높아진다.
  • 따라서 버그를 수정하거나 새로운 기능을 개발하는 경우에는 최대한 작은 단위로 나누어서 코드를 작성하고 통합해야 한다.

2. 통합 단계(빌드, 테스트, merge)를 자동화한다.

  • 메인 리포지토리에 merge된 코드가 정상적으로 빌드되는지를 확인해야 한다.
  • 메인 리포지토리에 merge된 코드가 기존 코드에 버그를 발생시키지는 않는지를 테스트해야 한다.
  • 정상적으로 빌드되는지, 기존 코드에 버그를 발생시키지는 않는지를 확인하기 위해 CI 스크립트를 사용한다.
  • CI 스크립트를 통해 merge된 코드가 정상적으로 빌드되는지를 확인하고 정상적으로 빌드가 된다면 유닛테스트 등을 진행해 테스트를 정상적으로 통과하는지를 자동화한다.
  • CI 스크립트를 정상적으로 통과한 코드는 배포 시 반영된다.
  • CI 스크립트를 정상적으로 통과하지 못한 코드(빌드가 실패하거나 테스트를 통과하지 못한)는 배포 시 반영하지 않으며, CI 스크립트를 통과할 수 있도록 수정해야 한다.

CI의 장점

  • 주기적으로 빈번하게 merge하므로 merge 충돌을 방지하여 개발 생산성이 좋아진다.
  • CI 스크립트를 통해 merge된 코드들을 자동으로 확인하기 때문에 코드의 문제점을 빠르게 발견할 수 있다.
  • 최대한 작은 단위로 나누어서 코드를 작성하고 통합하므로 코드의 문제점을 빠르고 쉽게 수정할 수 있다.
  • 유닛테스트 등의 테스트를 통과해야 하므로 안전한 코드를 작성해 안정적인 제품을 만들 수 있다.

CD(Continuous Delivery, 지속적인 제공/Deployment 지속적인 배포)

CD는 배포 단계의 진행 방법을 고민하는 단계를 말한다.

  • merge된 코드가 CI를 통과했다면 배포 준비 과정을 거친다.
  • 배포 준비 과정에서 릴리즈(Release)를 만든다.

Continuous Delivery

  • 릴리즈가 정상적인지를 판단하기 위해 개발자나 검증 팀이 릴리즈를 검증한다.
  • Continuous Delivery는 검증 과정에서 배포에 문제가 없다고 판단했을 때 릴리즈를 수동으로(직접) 배포하는 것을 말한다.

Continuous Deployment

  • Continuous Deployment는 릴리즈가 준비되면 자동으로 배포를 진행하도록 배포 과정을 자동화한 것을 말한다.

Continuous Delivery와 Continuous Deployment는 배포 단계의 자동화 여부에 차이가 있다.

CI / CD 파이프라인

  • CI / CD는 분리된 과정이 아니라 하나의 전체적인 흐름이다.
  • CI 과정을 거쳐서 만든 릴리즈를 CD를 통해 배포한다.

대표적인 CI / CD 도구

  • 젠킨스
  • Buildkite
  • 깃허브 액션

참고

profile
캐비지 개발 블로그입니다. :)

0개의 댓글