ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CI/CD 파이프라인 개념 - CI 편
    데브옵스 (DevOps) 2023. 8. 13. 22:47
    SMALL

    데이터 분석 중 분석 모델 결과가 주기적으로 자동 제공 (모델 서빙 등)되어야 하는 상황이 발생한다.

    이때, 협업 관점에서 코드를 타 분석가 및 개발자들과 통합(CI)하고 배포(CD)할 수 있도록 구성하는게 CI/CD 파이프라인이다.

    해당 편에서는 CI에 대해 다루고, 2편에서는 CD에 대해 다룬다.

     

    0. CI/CD 파이프라인 개요

    • CI (Continuous Integraion): 지속적 통합
    • CD (Continuous Delivery): 지속적 배포

    source: https://dzone.com/articles/the-complete-introduction-to-cicd-1

    1. CI 란?

    CI (Continuous Integraion) 즉, 지속적 통합이란 개발자들이 코드 변경 사항을 주기적으로 통합하고 테스트하는 접근 방식을 의미한다. CI는 소스 코드 변경 사항이 계속해서 통합되고 빌드되며, 자동화된 테스트를 통해 소프트웨어 품질을 유지하고 개선하는 데 목적이 있다. 

    이때, 자동화된 테스트는 단위 테스트, 통합 테스트 등이 포함된다. 

     

    그렇다면 CD를 하지 않으면 어떻게 될까? 

    CD 없이 CI 만 하면, 코드 통합은 되고 자동배포가 안되어서 수동으로 하면 된다.

     

    2. CI 도구 

    CI 도구로 젠킨스 (Jenkins), Travis CI, Circle CI 등이 있다. 

    대표적으로 Jenkins는 코드 작업들을 Java 로 작성된 자동화하는데 활용할 수 있는 오픈 소스 자동화 서버이다.

    여러 코드들이 통합 및 변경될때 이를 감지하고 Jenkins 에 알람 (Webhook)을 주게 된다. Jenkins 를 실행하기 위해서는 Jenkins 파이프라인이 기술된 Jenkinsfile이 필요하다. 

    Jenkins : https://www.jenkins.io/doc/

    Jenkinsfile 작성에 앞서서 독립적인 개발 환경 구성을 위해 Dockerfile이라는 Docker 이미지를 만든다. 이와 같이 생성된 Docker 이미지들이 많은데, 이들은 Harbor 로 관리하고 Harbor와 Jenkins 를 연동시켜 Dockerfile에 변동이 생기면 Build & push 를 실행하는 구조로 작동한다.

    3. CI 필요성

    • 코드 품질 향상: 코드 품질 유지 및 개선 가능
    • 빠른 피드백: 코드 변경 사항이 통합되고 테스트 되므로 문제를 빠르게 발견하고 수정함
    • 충돌 최소화: 코드 충돌 최소화하고 통합 작업이 쉬워짐
    • 자동화된 프로세스: 빌드, 테스트 등의 프로세스를 자동화하여 반복적인 작업을 최소화함
    • 팀 협업 강화: 동일한 코드베이스에서 작업하며 지속적인 통합을 통해 협업이 원활해짐

     


    용어 정리

     

    * 단위 테스트 (Unit Test)

    단위 테스트는 소스 코드의 가장 작은 단위인 "단위(unit)"를 개별적으로 테스트하는 것으로 이 단위는 함수, 메서드, 클래스 등과 같은 코드의 최소 실행 가능한 부분을 의미한다. 단위 테스트는 주로 코드의 각 기능이 올바르게 작동하는지 검증하는 데 사용된다.

     

    * 통합 테스트 (Integration Test)

    통합 테스트는 서로 다른 여러 개의 단위들이 조합되어 전체 시스템이나 모듈이 제대로 상호 작용하는지를 테스트하는 것으로 단위 테스트가 개별 단위의 기능을 확인하는 것이라면, 통합 테스트는 단위들 간의 상호작용과 데이터 흐름을 검증한다. 여러 개의 클래스나 컴포넌트가 함께 동작해야 하는 경우, 이들의 통합을 테스트하여 시스템 전체가 올바르게 동작하는지 확인하는 경우도 통합 테스트에 포함된다.

     

    * 코드 베이스 (Codebase)

    소프트웨어 프로젝트에서 작성된 모든 소스 코드의 집합을 의미한다. 코드베이스는 소프트웨어 개발 및 유지보수에 사용되며, 개발자들이 소스 코드를 수정, 추가, 삭제하거나 협업하는 데 사용된다. 이때, 코드베이스 관리는 버전 관리 시스템 (VCS)를 통해 이루어지며 Git은 VCS 중 하나이다.

    반응형
    LIST

    '데브옵스 (DevOps)' 카테고리의 다른 글

    도커 (Docker) 사용법  (0) 2023.10.01
    CI/CD 파이프라인 개념 - CD 편  (0) 2023.08.15
Designed by Tistory.