1.CI/CD 개념

1.1. CI(Continuous Integration, 지속적 통합)

모든 개발자가 개발한 코드를 지속적으로 병합하는 체계

1.2. CD(Continuous Delivery/Continuous Deployment)

개발/통합/테스트/릴리즈/배포를 자동화하여 개발환경과 운영 환경을 통합적으로 운영

Continuous Delivery(지속적 전달)란?

  • 배포 과정에서 사용자의 최종 허가가 있어야 운영 환경에 배포
  • 운영 환경에서 자동화된 테스트 과정에서 놓칠 수 있는 문제에 대해 개발자가 확인 가능

Continuous Deployment(지속적 배포)란?

  • 빌드부터 배포과정까지 자동으로 진행

2. CI/CD의 목적

개발/운영 환경에서 빌드/테스트를 지속적으로 수행하며 코드를 통합하기 위한 에포트 절약

소프트웨어가 항상 신뢰 가능한 수준에서 배포될 수 있도록 지속적 관리

3. CI/CD를 통한 자동화의 중요성

3.1. 생산성 향상

  • 정기적 빌드/테스트/병합을 통해 다수의 개발자가 함께 개발할 때 코드 간의 충돌 문제 해결
  • 수동 테스트에 소요되는 시간 단축
  • 개발자가 변경 사항을 자주 배포하여 개발에 유연성 제공
  • MSA를 적용할 시 특정 서비스의 빌드 오류로 전체가 배포되지 못하는 문제 예방

3.2. 품질 향상

  • 자주 포괄적 테스트가 수행됨에 따라 더 작은 규모에서 지속적으로 디버깅 가능
  • 빌드/테스트 과정에서 자동화를 통해 휴먼 에러 최소화
  • 빈번한 업데이트가 가능해짐에 따라 다양한 배포 전략을 도입할 수 있으며, 빠른 원복 가능

4. 주요 CI/CD 도구

4.1. CSP 관리형 서비스

  • AWS: CodeCommit CodeBuild CodeDeploy CodePipeline CodeStar
  • GCP: Cloud Build
  • Azure: Azure DevOps
  • IBM Toolchain
  • Pivotal Concourse

4.2. 오픈소스

  • Gitlab CE
  • Jenkins
  • Trevis CI

4.3. 상용도구

  • ATLASSIAN
  • Gitlab EE