CI / CD 란?
CI 란 Continuous Integration , 지속 적인 통합이라는 뜻. 즉 여러 개발자가 작성하거나 수정한 소스를 지속적으로 통합하고 테스트 하여 공유 레포지토리에 통합하는 것을 의미합니다
CD 란 Continous Deployment 또는 Continous Delivery 두용어 모두의 축약어 입니다.
Delivery 는 공유 레포지토리에 자동으로 Release 하는 것,
Deployment는 Production 레벨까지 자동으로 Deploy 하는 것을 의미 합니다.
지속적인 배포 , 즉 개발, 통합 , 배포, 릴리즈 , 테스트를 자동화 하여 지속적으로 배포하는것을 의미 합니다.
CI/CD 파이프 라인의 요소
파이프라인의 단계는 pipeline stage 로 이루어져있다.
- 빌드 Build - 애플리케이션을 컴파일 하는 단계
- 테스트 Test - 코드를 테스트 하는 단계
- 릴리즈 Realese - 애플리케이션을 레포지토리에 제공
- 배포 Deploy - 코드를 프로덕션에 배포
Continuous Integration
기존의 소스코드 통합과정에서는
- 소스코드를 업로드한다
- 통합된 코드에서 본인의 코드가 제대로 동작하는지 테스트한다
- 통합된 코드가 제대로 빌드되는지 테스트한다
- 결과를 확인하고 버그가 있다면 수정한다
git에 푸쉬하고 테스트, 빌드하는 과정이 너무나도 귀찮다.
이러한 과정들을 자동화 함으로써 사람에 의한 오류를 줄이고 시간도 아낄수 있다.
CI 의 과정
- 개발자가 로컬 개발환경에서 개발한 소스코드를 형상관리 시스템에 업로드
- CI 서버가 변경사항을 감지하고 소스코드를 다운로드
- 소스코드를 스크립트에 의해 빌드 및 테스트 수행
- 빌드 및 테스트 결과를 알림.
- 계속해서 수행한다
CI 의 장점
- 빌드와 테스트 프로세스가 자동화 되어 코드작성에 더욱 집중할수 있다.
- 자동화를 통해 수시로 통합할수 있으며, 이를 통해 문제를 조기에 발견하고 조치 할수 있다.
- 변경된 소스에 대한 단위 테스트 결과를 빠르게 확인할수 있다.
- 소스코드 통합과 검증에 들어가는 시간이 단축된다.
- 개발중인 소프트웨어를 언제든지 배포가능
Continuous Deployment or Continuous Delivery
CI/CD 파이프라인의 마지막 과정으로 자동으로 릴리즈 하는 작업
사실상 CD가 되려면 CI 가 선행 되어야 한다
CI 프로세스를 통해 빌드와 테스트를 진행하고 이를 통과한 코드에 대하여 서버에 그 내용을 반영하는 것.
CD 의 장점
- 개발부터 배포까지 자동화되어 간소화 되기 때문에 피드백을 빠르게 반영 할수있다
- 장에대응에 빨라진다
- 여러대의 서버를 동시에 운용시 배포과정이 매우 단축된다
- Jenkins
- Travis CI
- Circle CI
여러가지 툴들이 있지만 저는 Jenkins 를 선택해서 연습 해보았습니다.
참고자료1 참고자료2 참고자료3