CICD

CICD란?

Continuous Integration / Continuos Deployment 의 약자로

지속적인 통합, 지속적인 배포를 뜻한다.

 

지속적인 통합(CI)

CI를 하지않을 경우, 개발자들이 모여서 자신이 짠 코드를 병합하는 시간이 낭비된다.

또한 모여서 코드를 병합하기 전에는 개발자 각각이 다른 코드를 가지고 있는 상태이므로 좋지않다.

CI가 이러한 문제를 해결해준다.

CI란 빌드/ 테스트의 자동화를 뜻한다.

 

과정

1. 개발자가 코드 병합 요청  ->  2. CI Tool에서 빌드, 테스트를 진행  ->  3. 문제가 없다면 병합  ->  4. 문제 발생 시 개발자에게 피드백

 

결론

위 과정은 개발자가 직접 할 수도 있지만, 테스트를 하염없이 기다리는 것은 굉장히 지루하고 비효율적이다. 따라서 푸쉬해놓고 다른 일을 하면서 문제가 생기면 CI에게 알림을 받는 방식으로 효율적으로 코드를 최신화하자

 

 

CI의 4가지 규칙:

  •  모든 소스코드가 살아있고 누구든 현재의 소스에 접근할 수 있는 단일 지점을 유지할 것.
  •  빌드 프로세스를 자동화해서 누구든 소스로부터 시스템을 빌드할 수 있게 할 것.
  •  테스팅을 자동화해서 언제든지 시스템에 대한 건전한 Test Suite(테스트 묶음)를 실행할 수 있게 할 것.
  •  누구든 현재 실행 파일을 얻으면 지금까지 가장 완전한 실행 파일을 얻었다는 확신을 하게 할 것.

CI Tools

  • Jenkins: 다양한 플러그인이 있지만, 세팅이 복잡하다. (설치형)
  • TravisCI:  github와의 연동성, 설치 없이 웹에서 사용가능, yml을 통한 쉬운 설정 (클라우드형)
  • Github Action: yml에 설정(설정이 쉬움), 설치 없이 repository에서 관리 (저장소형)
  • 그 외..

 

지속적인 배포(CD)

통합이 완료된 실행파일을 배포할 때, 서버 1대에만 배포한다면 직접 실행파일을 업로드한 후 실행하면 된다.

하지만 서버의 규모가 커져서 100대의 서버에 배포를 해야하는 상황이라면 일일이 직접 배포하는 것은 비효율적이다.

이 문제를 해결하기 위해 CI의 연장선인 CD의 개념이 필요하다.

CD란 빌드의 결과물을 프로덕션으로 릴리스하는 작업을 자동화하는 것을 의미한다.

 

CD는 지속적 제공(Delivery)과 지속적 배포(Deployment) 두 가지가 있다.

이 둘은 CI에서 Build, Test 완료 후 결과물을 staging환경에 업로드 한 후에 배포하는 과정에서 차이가 있다.

프로덕션으로 릴리스하는 과정을 수동으로 하는 경우는 Delivery에 해당하고, 자동으로 하는 경우가 Deployment이다.

 

새로운 서비스 배포 타이밍에 기존 서비스를 다운시켜야 함 -> 다운 타임이 발생

이 문제를 해결하기 위한 방법 : 무중단 배포

 

무중단 배포 방법: Docker, Nginx, S3 + code Depoly 등..

 

 

참고자료

CI/CD 개념: https://www.redhat.com/ko/topics/devops/what-is-ci-cd

 

CI/CD(CI CD, 지속적 통합/지속적 배포): 개념, 툴, 구축, 차이

CI/CD는 애플리케이션의 통합 및 테스트 단계부터 제공 및 배포까지 애플리케이션 라이프사이클 전체에서 지속적인 자동화와 지속적인 모니터링을 제공하는 것을 뜻합니다.

www.redhat.com

CI/CD 배포 전략: https://dev.classmethod.jp/articles/ci-cd-deployment-strategies-kr/

 

매번 헷갈리는 CI/CD 배포 전략 정리해버리기 | DevelopersIO

AWS 자격증을 공부하다가 매번 헷갈리는 배포 전략에 대해서 정리해보았습니다.

dev.classmethod.jp

CI/CD 구축: https://bcp0109.tistory.com/363

 

Github Actions CD: AWS EC2 에 Spring Boot 배포하기

Overview 애플리케이션을 개발하면 외부에서도 접근 가능하도록 클라우드 환경에 배포합니다. 이전에 포스팅 했던 AWS 1편에서는 마지막에 scp 명령어로 로컬에 존재하는 빌드 파일을 EC2 인스턴스

bcp0109.tistory.com