Continuous Integration(CI)는 개발자를 위한 자동화 프로세스로 지속적인 통합을 의미
CI가 성공적으로 구현될 경우 어플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 여러 개발자가 서로 충돌할 문제를 해결 가능
Continuous Delivery, Continuous Deployment(CD)는 지속적인 서비스 제공 및 지속적인 배포를 의미하며 이 두 용어는 상호교환적으로 사용
두 의미 모두 파이프라인의 추가 단계에 대한 자동화를 뜻함
지속적인 제공은 최소한의 노력으로 새로운 코드를 배포하는 것을 목표
지속적인 배포는 파이프라인의 다음 단계를 자동화함으로써 지속적인 제공이 가진 장점을 활용
개발부터 운영이 끝없이 반복되는 위 그림과 같은 형태를 띄움
CI를 하게 되면 소스코드는 항상 Ready-to-run상태(배포가 가능한 상태는 아님) 가능
-> 중간에 누군가 합류를 해도 빌드되는 코드 사용 가능
양질의 코드 퀄리티 유지
-> 테스트의 자동화를 이루면 항상 테스트 코드를 통과하는 코드만 공유 레포에 올라갈 수 있어 상당한 퀄리티의 소스코드 유지 가능
CD를 하게 되면 개발부터 배포까지 과정이 번거롭지 않아 사용자 피드백을 빠르게 반영 가능
-> 이슈 및 장애 대응이 빨라짐
CI/CD는 애플리케이션 개발 단계를 자동화하여 보다 짧은 주기로 고객에게 제공하는 방법
1. 현재 빌드 프로세스 문서화 및 벤치마킹
-> 현재 빌드, 테스트 및 배포 프로세스 문서화
->현재 프로세스 벤치마킹
2. 자동화 된 반복 가능한 빌드 프로세스 생성
-> 최적화되고 반복 가능한 프로세스 설계
-> 구성 및 협약을 기반으로 빌드 작성
-> 추적성 및 충실도 관리
3. 개발 프로세스 및 실습 조정
-> 황금률 준수
-> 개발자가 단위 테스트를 작성하도록 보장
-> 주 지점에 자주 공개
4. CI 환경 만들기
-> CI 프로세스로 투명성 강화
-> 결과 대시 보드
-> 다중 알림 채널 제공
-> 고객 피드백 장려 및 촉진
-> 빌드를 빠르게 유지하기
-> 빌드 유형 이해
-> 실패로부터 복구 할 수 있는 설계
5. 분석,검사 및 고급 테스트 프로세스 추가
-> 정적 코드 분석 및 코드 검사 도구 포함
-> 자동화 된 기능 및 시스템 테스트 기능 추가
6. 테스트 환경에 배포
-> 테스트 환경 프로비저닝 및 구성
- Provisioning - 사용자의 요구에 맞게 시스템 자원을 할당,배치,배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해 두는 것
7. 후속 조치
-> 정기적인 매트릭스 데이터 검토를 통해 개선 기회 파악
-> 지속적인 프로세스 모니터링 및 향상