About CI
19 Oct 2017Continuous Integration 특징
1. 소스코드 일관성 유지.
기본적으로 소스 관리 시스템이 필요하다. SVN, CVS, GIT 등. CI 는 main branch ( trunk ) 의 내용을 받아 빌드 수행.
2. 자동 빌드
빌드가 이루어지는 시점은 아래와 같이 구분된다.
1) 커밋에 따른 자동 빌드
소스코드가 소스 관리 시스템에 커밋이 될 때마다 CI 툴이 이를 감지하고 자동 빌드.
무결성 보장에는 좋지만, 빌드 시간이 길 경우 빌드가 정체된다.
2) 시간 간격에 의한 빌드
매일 저녁 5시에 빌드를 한다던가 하는 규칙을 정해서 한다.
개발자들이 커밋 스케쥴을 관리할 수 있고, 대규모 빌드에 적절하다.
보통 퇴근 시간 1~2시간 전에 하는 것이 좋다. ( 여유를 두고 )
3. 자동 테스팅
빌드 과정에서 테스트를 할 수 있다. 기능적 요소 및 비기능정 ( 성능 ) 적 요소를 매번 검증하여 코드 품질을 높일 수 있다.
4. 일일 체크아웃과 빌드
출근 후 최신 코드 내려받고, 출근전 현재 코드를 소스 관리 시스템에 저장하여 소스의 무결성 유지.
CI 프로세스
-
개발자
1) 아침에 출근해서 소스 관리 시스템으로부터 Checkout 또는 Update 받는다.
2) 코드를 갖고 개발을 수행하고 테스트를 작성한다.
3) 로컬에서 빌드 및 테스트 진행한다.
4) 테스트 과정에서 커버리지 분석과 Code Inspection 을 수행한다. ( Optional ) - PMD, FindBugs 등을 이용하여 Deadlock, Lock Contention 과 같은 병목 구간 검출 및 Memory Leak, Connection Leak 과 같은 자원 누수에 대한 검출, 코딩 스타일 점검 등을 수행.
5) 완료된 코드를 소스 관리 시스템에 저장.
-
CI Tools
1) 체크아웃 : 정해진 시간이나 소스 커밋 시점에 빌드를 시작. 먼저 최신 소스코드를 체크아웃 혹은 업데이트 받는다.
2) 컴파일 : 체크아웃 코드에 내장되어 있는 빌드 스크립트를 가동하여 컴파일 수행
3) 배포 : 컴파일이 완료된 코드를 테스트 서버에 배포.
4) 테스트 수행 : 체크아웃 코드 내의 테스트 코드를 수행하고 리포팅 한다.
5) 커버리지 분석 : 테스트 과정 중 코드 커버리지를 수행.
6) 코드 인스펙션
7) 소스 태깅 : 1~6 과정을 정상적으로 수행하면, 현재 소스 관리 시스템에 저장된 버전에 tagging 을 하여 저장한다.
8) Reverse ( optional ) : 빌드나 테스트가 실패했을 때 이전에 성공한 빌드 버전으로 소스 롤백.
9) 결과 분석 : 빌드와 테스트 완료 후 테스트 결과서를 통해 문제가 있는 테스트를 개발자가 수정하도록 한다.
대표 툴
Jenkins, Cruise Control, Ant hill, TeamCity ( 무료, 상용 둘 다 제공 ), Atlassian Bamboo
CI 시스템 구축을 위한 핵심 구성요소
- CI Server
- 빌드 프로세스를 관리하는 서버
- Jenkins, CruiseContrl.NET, TeamCity
- SCM(Source Code Management)
- 소스코드 형상관리 시스템
- 소스코드의 개정과 백업 절차를 자동화하여 오류 수정 과정을 도와줄 수 있는 시스템
- 여러사람이 같은 프로젝트에 참여할 경우, 각자가 수정한 부분을 팀원 전체가 자동으로 동기화할 수 있는 시스템
- Subversion, Git, Mercurial => CI서버에서 자동으로 폴링하여 검증할 수 있도록 소스코드를 관리하는 형상관리 시스템 필요.
- Build Tool
- 컴파일, 테스트, 정적분석 등을 실시해 동작 가능한 소프트웨어를 생성
- Ant, Maven, MSBuild, Make =>
- Test Tool
- 작성된 테스트 코드에 따라 자동으로 테스트를 수행해주는 도구로, 빌드 툴의 스크립트에서 실행
- JUnit, CppUnit, CppTest, MSTest, Selenium(사용자테스트 자동화 가능)
=> 단위테스트는 테스트 대상이 되는 코드 기능의 아주 작은 특정 영역을 실행해 보는 것으로, 개발자가 작성한 테스트 코드로 특정 메소드(Function)를 시험해보는 것이 일반적.
즉 개발자가 작성한 메소드가 입력값에 따라 제대로 사행되는지 여부를 체크 JUnit(자바 애플리케이션의 단위 테스트 자동화를 위한 프레임웍)
- Test Coverage Tool
- 테스트 코드가 대상 소스 코드에 대해 어느정도 커버하는지 분석하는 도구
- Emma, Cobertura, TestCocoon
- Inspection Tool
- 프로그램을 실행하지 않고, 소스코드 자체로 품질을 판단할 수 있는 정적분석 도구
- 코딩 표준 준수 검사, 코드 메트릭 측정, 중복코드 검사, 코드 인스펙션 검사 등이 있음.
- CheckStyle, FindBugs, Cppcheck, Valgrind
컴파일 : 소스코드 파일 등의 원시파일을 실행파일, 라이브러리 등의 Object 파일로 바꾸는 작업
빌드 : 소스코드 파일들을 컴퓨터에서 실행할 수 있는 소프트웨어로 변환하는 일련의 과정
http://happystory.tistory.com/89
http://asfirstalways.tistory.com/304