1. CI/CD?

  1. [설명]
    1. **CI[Continuous Integration] / CD[Continuous Delivery]**은 Application 개발 단계를 자동화하여 Application을 더욱 짧은 주기로 client에게 제공하는 방법을 말합니다
  2. [개념]
    1. 지속적인 통합, 지속적인 Service제공, 지속적인 배포를 말합니다
    2. 새로운 코드 통합으로 인해 개발 및 운영팀에 발생하는 문제(integration hell - 통합지옥)를 해결하기 위한 솔루션 입니다
    3. 통합 및 Test단계에서부터 제공 및 배포에 이르는 Application의 Life Cycle 전체에 걸쳐 지속적인 자동화와 지속적인 모니터링을 제공합니다
    4. CI/CI Pipeline”이라 부르며, 개발 및 운영팀의 애자일 방식협력을 통해 DevOps or SRE(사이트 신뢰성 엔지너어링)방식으로 지원됩니다
  3. [차이점]
    1. CI
      1. 개발자를 위한 자동화 프로세스인 지속적인 통합을 의미합니다
      2. 지속적인 통합이 제대로 구현되면 Application 코드의 새로운 변경사항이 정기적으로 Build 및 Test를 거쳐 공유 리포지토리에 병합됩니다
      3. 여러 명의 개발자가 동시에 Application 개발과 관련된 코드 작업을 할 경우 서로 충돌하는 문제를 해결 할 수 있습니다
    2. CD
      1. 지속적인 서비스 제공 및 지속적인 배포를 의미하며 상호 교환하여 사용이 되기도 합니다
      2. Pipeline의 추가 단계에 대한 자동화를 뜻하지만 때로는 얼마나 많은 자동화가 이루어지고 있는지를 설명하기 위해 별도로 사용되기도 합니다
        1. 지속적인 제공?
          1. 개발자들이 Application 에 적용한 변경 사항이 Bug Test를 거쳐 리포지토리에 자동으로 Upload되는 것을 말합니다
          2. [예시]
            1. 운영팀은 리포지토리에서 Application을 실시간 프로덕션 환경으로 배포할 수 있습니다
            2. 개발팀과 비즈니스팀간의 가시성 및 커뮤니케이션 부족 문제를 해결해줍니다
            3. 지속적인 서비스 제공은 최소한의 노력으로 새로운 코드를 배포하는 것을 목표로합니다
        2. 지속적인 배포?
          1. 개발자의 변경사항을 리포지토리에서 고객이 사용가능한 프로덕션 환경까지 자동으로 릴리스하는 것을 의미합니다
          2. [예시]
            1. Application 제공 속도를 저해하는 수동 프로세스로 인한 운영팀의 프로세스 과부하 문제를 해결해줍니다
            2. Pipeline의 다음단계를 자동화함으로써 지속적인 서비스를 제공해준다는 것 입니다
  4. [3가지 구축 사례]
    1. CI[지속적 통합]
      1. 여러 개발자들이 동일한 Application의 각기 다른 기능을 동시에 작업할 수 있도록 하는 것을 말한다
    2. CD[지속적 제공]
      1. CI의 Build 자동화, Unit 및 통합 Test 수행 후, 이어지는 지속적 제공 프로세스에서는 유효한 코드를 리포지토리에 자동으로 릴리스하는 것을 말한다
    3. CD[지속적 배포]
      1. 프로덕션 준비가 완료된 Build를 코드 리포지토리에 자동으로 릴리스하는 지속적 제공의 확장된 형태인 지속적 배포는 Application을 프로덕션으로 릴리스하는 작업을 자동화하는 것을 말합니다
  5. [Tool & 구축]
    1. Jenkins 자동화 서버
      1. 간단한 CI Server에서 완전한 CD Hub에 이르는 모든 것을 처리할 수 있게 설계 되어있음을 말합니다
    2. Tekton Pipelines
      1. 표준 클라우드 네이트브 CI/CD 경험과 컨테이너를 제공하는 쿠버네티스 플랫폼을 위한 CI/CD FrameWork입니다
    3. Open Source CI/CD Tools
      1. Spinnaker
        1. 멀티클라우드 환경을 위해 구축된 CD 플랫폼입니다
      2. GoCD
        1. 모델링 및 시각화에 중점을 둔 CI/CD Server를 말합니다
      3. Concourse
        1. 지속적인 OpenSource 작업 툴을 말합니다
      4. Screwdriver
        1. CD용으로 설계된 Build 플랫폼입니다
    4. 벤터가 제공하는 관리형 CI/CD Tools
      1. GitLab, CircleCI, Travis CI, Atlassian Bambbo ⇒ CI/CD 솔루션을 제공함
    5. DevOps의 Basic Tools[CI/CD 프로세스]
      1. 구성 자동화
        1. Ansible, Chef, Puppet
      2. 컨테이너 런타임
        1. Docker, rkt, cri-o
      3. 컨테이너 오케스트레이션
        1. 쿠버네티스
      4. ⇒ CI/CD 워크플로우에 표시가 됩니다