About CI

Tags:

Continuous Integration 특징

1. 소스코드 일관성 유지.

기본적으로 소스 관리 시스템이 필요하다. SVN, CVS, GIT 등. CI 는 main branch ( trunk ) 의 내용을 받아 빌드 수행.

2. 자동 빌드

빌드가 이루어지는 시점은 아래와 같이 구분된다.

  1) 커밋에 따른 자동 빌드

소스코드가 소스 관리 시스템에 커밋이 될 때마다 CI 툴이 이를 감지하고 자동 빌드.
무결성 보장에는 좋지만, 빌드 시간이 길 경우 빌드가 정체된다.

  2) 시간 간격에 의한 빌드

매일 저녁 5시에 빌드를 한다던가 하는 규칙을 정해서 한다.
개발자들이 커밋 스케쥴을 관리할 수 있고, 대규모 빌드에 적절하다.
보통 퇴근 시간 1~2시간 전에 하는 것이 좋다. ( 여유를 두고 )
3. 자동 테스팅

빌드 과정에서 테스트를 할 수 있다. 기능적 요소 및 비기능정 ( 성능 ) 적 요소를 매번 검증하여 코드 품질을 높일 수 있다.

4. 일일 체크아웃과 빌드

출근 후 최신 코드 내려받고, 출근전 현재 코드를 소스 관리 시스템에 저장하여 소스의 무결성 유지.

CI 프로세스

  1. 개발자

    1) 아침에 출근해서 소스 관리 시스템으로부터 Checkout 또는 Update 받는다.

    2) 코드를 갖고 개발을 수행하고 테스트를 작성한다.

    3) 로컬에서 빌드 및 테스트 진행한다.

    4) 테스트 과정에서 커버리지 분석과 Code Inspection 을 수행한다. ( Optional ) - PMD, FindBugs 등을 이용하여 Deadlock, Lock Contention 과 같은 병목 구간 검출 및 Memory Leak, Connection Leak 과 같은 자원 누수에 대한 검출, 코딩 스타일 점검 등을 수행.

    5) 완료된 코드를 소스 관리 시스템에 저장.

  2. 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 시스템 구축을 위한 핵심 구성요소

  1. CI Server
    • 빌드 프로세스를 관리하는 서버
    • Jenkins, CruiseContrl.NET, TeamCity
  2. SCM(Source Code Management)
    • 소스코드 형상관리 시스템
    • 소스코드의 개정과 백업 절차를 자동화하여 오류 수정 과정을 도와줄 수 있는 시스템
    • 여러사람이 같은 프로젝트에 참여할 경우, 각자가 수정한 부분을 팀원 전체가 자동으로 동기화할 수 있는 시스템
    • Subversion, Git, Mercurial => CI서버에서 자동으로 폴링하여 검증할 수 있도록 소스코드를 관리하는 형상관리 시스템 필요.
  3. Build Tool
    • 컴파일, 테스트, 정적분석 등을 실시해 동작 가능한 소프트웨어를 생성
    • Ant, Maven, MSBuild, Make =>
  4. Test Tool
    • 작성된 테스트 코드에 따라 자동으로 테스트를 수행해주는 도구로, 빌드 툴의 스크립트에서 실행
    • JUnit, CppUnit, CppTest, MSTest, Selenium(사용자테스트 자동화 가능) => 단위테스트는 테스트 대상이 되는 코드 기능의 아주 작은 특정 영역을 실행해 보는 것으로, 개발자가 작성한 테스트 코드로 특정 메소드(Function)를 시험해보는 것이 일반적.
      즉 개발자가 작성한 메소드가 입력값에 따라 제대로 사행되는지 여부를 체크 JUnit(자바 애플리케이션의 단위 테스트 자동화를 위한 프레임웍)
  5. Test Coverage Tool
    • 테스트 코드가 대상 소스 코드에 대해 어느정도 커버하는지 분석하는 도구
    • Emma, Cobertura, TestCocoon
  6. Inspection Tool
    • 프로그램을 실행하지 않고, 소스코드 자체로 품질을 판단할 수 있는 정적분석 도구
    • 코딩 표준 준수 검사, 코드 메트릭 측정, 중복코드 검사, 코드 인스펙션 검사 등이 있음.
    • CheckStyle, FindBugs, Cppcheck, Valgrind

컴파일 : 소스코드 파일 등의 원시파일을 실행파일, 라이브러리 등의 Object 파일로 바꾸는 작업
빌드 : 소스코드 파일들을 컴퓨터에서 실행할 수 있는 소프트웨어로 변환하는 일련의 과정

http://happystory.tistory.com/89
http://asfirstalways.tistory.com/304