CI/CD는 애플리케이션의 배포 및 통합을 자동화하는 방법입니다.
옛날에는, CI/CD라는 개념이 존재하지않았고 그로인해 새로운 코드 통합으로 인해 개발 및 운영팀에 발생하는 문제인 Integration Hell이라는 문제가 발생했었습니다.
이것을 해결하기 위해 CI/CD라는 방법이 나왔고, 이 포스트에서는 이것을 하나씩 알아보겠습니다.
CI는 Continuous Integration ( 지속적 통합 )을 뜻합니다.
CI는 말그대로, 코드의 통합을 지속적으로 자동화하여 진행하고 이를 통해 코드가 충돌할 수 있는 문제를 해결해줄 수 있습니다.
CI는 단순히 코드의 변경사항을 통합하는 것만을 의미하지 않습니다.
테스트를 자동화하고, 빌드하며 레포지토리에 통합하는 것까지 의미합니다.
이를 통해 자동으로 코드가 통합되며, 수동으로 통합되는 상황을 제거하여 개발자들이 개발에만 집중할 수 있게 해준다는 장점이 있습니다.
CD는 Continous Deployment ( 지속적 배포 ) 혹은 Continous Delivery ( 지속적 제공 ) 을 의미합니다.
Continous Delivery ( 지속적 제공 )은 유효한 코드를 레포지토리에 자동으로 릴리즈하는 과정을 의미합니다.
CI를 통해 통합된 코드를 레포지토리까지 릴리즈하는 과정이라고 생각하면 됩니다.
Continous Deployment ( 지속적 배포 )는 유효한 코드를 레포지토레에 자동으로 릴리즈하고, 프로덕션 환경에까지 릴리즈하는 과정을 의미합니다.
즉 Continous Delivery는 레포지토리에 릴리즈하고 수동으로 프로덕션에 배포를 진행하며,
Continous Deployment는 프로덕션에 배포까지 자동화하는 개념이라고 생각하면 됩니다.
현재, CI/CD를 지원하기 위한 많은 툴들이 있습니다.
이러한 툴 중 유명한 세가지의 툴들을 한 번 살펴보겠습니다.
Java 기반의 오픈소스입니다.
현존하는 CI 툴 중 가장 오래되었으며, 다양한 플러그인들이 존재합니다.
2016년에 개발되었으며, 여러 git 저장소를 지원합니다.
Github에서 얼마전에 인수하여 Github와 쉬운 연동이 가능한 CI 툴입니다.