CI/CD란?
- CI/CD는 애플리케이션 개발 단계부터 배포 때까지의 모든 단계를 자동화를 통해 좀 더 효율적이고 빠르게 사용자에게 빈번히 배포할 수 있는 것을 말한다.
- CI/CD의 핵심은 자동화이며, DevOps 엔지니어의 핵심이다.
CI/CD의 종류
- jenkins
- GitLab
- CricleCI
- TeamCity
CI (Continuous Integration)
- 지속적인 통합이라는 의미이다.
- 애플리케이션의 버그 수정이나 새로운 코드 변경이 주기적으로 빌드 및 테스트되면서 공유되는 저장소에 통합되는 것을 의미한다.
- 개발자를 위한 자동화 프로세스라고 볼 수 있으며 code - bulid, Test 단계이다.
- Code: 개발자가 코드를 원격 코드 저장소에 push하는 단계.
- Build: 원격 코드 저장소로부터 코드를 가져와 유닛 테스트 후 빌드하는 단계.
- Test: 코드 빌드의 결과물이 다른 컴포넌트와 잘 통합되는지 확인하는 과정.
- 개발자는 코드를 저장소에 push -> 빌드를 하며 결과를 통해 빌드가 성공했는지 실패했는지 확인 -> 통합 테스트 결과를 통해 버그를 발견 -> 테스트가 완료된 코드에 대해 빠른 전달이 가능 -> 지속적인 배포가 가능해진다.
코드를 빈번하게 merge
- 예시) 여러 개발자들이 같이 협업을 하며 개발을 하고 있다.
- 각자 개발한 것들을 빈번하게 merge하지 않고 오랜 시간 동안 개발을 진행하다가 많은 코드를 한번에 통합한다면? 많은 코드들의 충돌이 일어난다.
즉, 주기적으로 빈번히 push하고 개발하며 계속해서 통합해나가야 한다.
자동화
- 빈번하게 push하고, 통합을 해야하기 때문에 효율성이 떨어진다.
- 이러한 한계를 극복하기 위해 자동화 프로그램이 등장했다.
- github에 코드를 push하면 나머지 빌드와 테스트는 프로그램이 자동으로 한다.
즉, 개발자들은 형상관리 툴에 작업한 코드를 통합하면 자동화 프로그램은 빌드 및 테스트를 해준다.
CD (Continuous Delivery, Continuous Deployment)
- 지속적인 제공, 지속적인 배포라는 의미이다.
- 빌드, 테스트 과정을 거친 후, 배포 단계에서 release할 준비 단계를 거치고 문제가 없는지 검증한다.
- 그 후, 배포를 수동적으로 진행하는 것이 지속적인 제공, 자동화를 통해 배포를 진행하는 것이 지속적인 배포이다.
- Release - Deploy - Operate 단계이다.
- Release: 배포 가능한 소프트웨어 패키지를 작성.
- Deploy: 프로비저닝을 실행하고 서비스를 사용자에게 노출 => 실직적인 배포.
- Operate: 서비스 현황을 파악하고 생길 수 있는 문제를 감지.
- CI를 통해 코드를 검증하고, 배포 환경과 비슷한 곳에서 검증, 검증된 소프트웨어를 배포.
지속적인 배포
- 사례) Github Page.
- 레퍼지토리를 생성하고 커밋을 하면 Github Page가 알아서 해당 파일을 번들링하여 Github Page 서버에 업로드 한다.
- 즉 이러한 사례가 지속적인 배포라고 할 수 있다.
728x90
반응형