▪ 소프트웨어 개발에서 Build/Test 의 프로세스를 지속적으로 수행하는 것. (Daily Build 라고도 했었음)
▪ 지속적으로 개발된 Unit 코드에 대한 Integration 작업을 수행하여, 항상 최신의 상태를 유지
▪ Agile 개발 방법론/프로세스 중의 하나인 XP(eXtream Programming)의 Practice 중의 하나
Continuous Integration의 특징 및 장점
▪ 항상 최신의 상태를 유지하기 위해 공통의 프로젝트 버전 관리 시스템을 이용하여 코드베이스의 복사본을 이용하여 개발 작업을
거치고, 이를 다시 검증 후에 다시 업데이트.
▪ 개발 시점과 Integration 시점이 멀어질 경우에, Integration 후의 발생하는 다양한 문제를 해결하는 데 많은 시간이 소요되는 데 반해,
이러한 통합 과정을 초기부터 지속적으로 수행하여 보다 빠르고 쉽게 문제점을 해결하여, 소프트웨어 품질과 생산성을 향상.
▪ 시작 단계부터 지속적인 통합을 통해서 'integration Hell'이라고 불리는 개발 종료 후의 통합 시에 발생한 문제를 예방하여,
재작업에 필요한 비용 감소 및 시간 단축
▪ 지속적인 버전관리를 통해서 발생하는 버그, 에러 등에 대해서 빠르게 확인 및 수정이 가능
Continuous Integration에 필요한 것
▪ CI 도구(CI Server)
- 전체 Build 프로세스를 관리
- Ex) Jenkins
▪ 버전 관리 시스템(SCM)
- 항상 동일한 최신의 베이스라인 코드를 가지고 작업 필요.
- Ex) Git, SVN
▪ 빌드 도구(Build Tool)
- 개발된 코드를 컴파일 과정을 거쳐서 서비스 가능한 형태로 만드는 빌드 과정을 수행 할 도구
- Ex) Maven, Ant
▪ 테스트 도구(Test Tool)
- 단위테스트, 통합테스트, 사용자 테스트, 회귀 테스트 등을 자동으로 수행 할 수 있는 도구
- Ex) Junit
Practices of Continuous Integration - [ Martinfowler의 CI의 대한 포스팅 중의 CI를 수행하기 위한 방법 ]
▪ Maintain a Single Source Repository.
▪ Automate the Build
▪ Make Your Build Self-Testing
▪ Everyone Commits To the Mainline Every Day
▪ Every Commit Should Build the Mainline on an Integration Machine
▪ Fix Broken Builds Immediately
▪ Keep the Build Fast
▪ Test in a Clone of the Production Environment
▪ Make it Easy for Anyone to Get the Latest Executable
▪ Everyone can see what's happening
▪ Automate Deployment
※Martinfowle
영국 출신의 객체지향 프로그래밍 전문가이자, 컨설턴트이며, 리팩토링의 리더 중의 한 명.