프로젝트빌드와테스트의자동화를위한 CI 소개 이진복 (Jinbock Lee) 2009 년 11 월 06 일
목차 I. CI 정의 II. CI 필요성 III. CI 기능및특징 IV. CI 제품 V. Hudson VI. 적용방안 VII. 결론 - 1 -
I. CI 정의 q CI (Continuous Integration) 시스템을구축하고배포하는과정의통합비용 ( 시간 ) 을줄이기위한소프트웨어공학의한부분 여러개발자가각각개발한소스코드를주기적으로수집하여한꺼번에빌드및테스트 - 빌드, 테스트, 소스 inspection, coverage 분석, 성능분석등 - 초기개발과정부터빈번한통합 - 통합시에발생하는오류및문제점을주기적으로확인가능 - Agile 개발프로세스 프로젝트수행과정에서발생하는수정사항을빠르게발견하여비용과시간을감소 q 역사 1999 년, Martin Fowler 와 Kent Beck 의논문으로개념소개 - Extreme Programming (XP) 커뮤니티 현재, 약 25 개의 CI 제품 - 2 -
II. CI 필요성 q Integration hell 다양한환경의개발자가개발한소스를중앙에서통합하여빌드할시에예상치못한문제점발생가능 - 라이브러리의존성, 중복파일 ( 클래스 ), 버전충돌및개인적인개발환경등 큰규모의통합시에발생하는문제점을해결하기위해많은시간과비용이필요 q 통합비용감소 개발자들의소스를주기적으로수집하고한곳에서통합하여문제점을조기에파악 발생한문제점을빈번하게파악하고해결 다음통합과정을위한기반 ( 완성된시스템 ) 점차완성되어지는시스템 - 3 -
III. CI 기능및특징 (1) q 저장소관리 프로젝트의모든소스는공통의저장소에존재 소스의버전관리 (revision control) 별도의형상관리제품사용 - CVS, Subversion, Perforce, Clearcase 등 q 자동화된빌드 수집된소스를자동으로빌드 - 소스변경에따른빌드 - 특정시간을주기로빌드 빌드툴사용 - Make, Ant, Maven, MSBuild 등 - 4 -
III. CI 기능및특징 (2) q 테스트 Test-driven 개발 시스템통합의한과정으로테스트수행 테스트과정이성공해야만통합을위한다음단계로진행 q 자동화된배포 빌드및테스트과정을마친후, 자동으로운영서버 ( 테스트 ) 에배포 q 모니터링 시스템통합과정의모든상황을파악 - 오류나문제점을조기에파악할수있는환경제공 - 5 -
III. CI 기능및특징 (3) q CI 구조 - 6 -
III. CI 기능및특징 (4) q CI 시나리오 1 개발자가본인컴퓨터에서소스작성하고빌드및테스트수행 2 개발자가형상관리저장소에소스를업로드 3 CI 서버가형상관리저장소에서변경내역을감지하고다운로드 4 CI 서버는다운로드한소스를스크립트에의해서빌드및테스트과정수행 5 빌드및테스트결과를 CI 서버에저정하거나담당자에게알림 6 CI 서버는형상관리저장소의변경사항을계속해서감지 - 7 -
III. CI 기능및특징 (5) 장점 별도의디버깅과정없이통합시발생하는문제점파악가능 소스의결함으로인한문제점을조기에발견 소스의변경으로인하여다른모듈과의충돌을조기에발견 변경된모든소스에대한단위테스트결과를빠르게확인가능 올바르지못한프로젝트의진행방향을조기에발견 최종릴리즈전에가능한많은문제점을발견할수있음 개발중인소프트웨어를언제라도배포가능 CI 장단점 단점 CI 를위한별도의서버필요 효과적인 CI 를위한표준절차가필요하고개발자는이규칙을따라야함 - 8 -
IV. CI 제품 (1) 제품내용 Hudson 플랫폼유연성 Java Builder SCM 알림기능 IDE 연동버그관리연동 Test tool 연동라이선스및가격 Servlet Container (war 파일 ), Stand-alone Ant, Maven 2, Kundo 기본제공 : CVS, Perforce, Subversion 플러그인제공 : AccuRev, Bazaar, BitKeeper, Clearcase, CMVC, Git, Mercurial, PVCS SourceSafe, StarTeam, TFS Android, E-mail, Google Calendar, IRC, XMPP, RSS, Twitter Eclipse, IntelliJ IDEA, NetBeans Bugzilla, Google Code, JIRA, Mantis, Trac Junit, Cobertura,Clover 무료오픈소스 제품내용 LuntBuild 플랫폼유연성 Servlet Container (war 파일 ) Java Builder Ant, Maven 1, Maven 2 SCM 알림기능 IDE 연동 버그관리연동 Test tool 연동 라이선스및가격 Accurev, CVS, Visual Sourcesafe, Subversion, StarTeam, Perforce, Base Clearcase Clearcase, UCM, File system e-mail, jabber, msn messanger Eclipse(Luntclipse) none none 무료오픈소스 - 9 -
IV. CI 제품 (2) 제품 내 용 플랫폼유연성 Servlet Container (war 파일 ) Java Builder Ant, Maven1, Maven 2 SCM CVS, Subversion 알림기능 e-mail IDE 연동 None 버그관리연동 None Test tool 연동 None 라이선스및가격 무료오픈소스 Apache Gump 제품내용 플랫폼유연성 Servlet Container (war 파일 ) Apache Continuum Java Builder Ant, Maven1, Maven 2 SCM 알림기능 IDE 연동 버그관리연동 Test tool 연동 라이선스및가격 CVS, Subversion, Clearcase, Perforce, Starteam, Visual Source Safe, CM Synergy Bazaar, Mercurial Mail, Jabber and Google Talk, MSN, IRC none none none 무료오픈소스 - 10 -
IV. CI 제품 (3) 제품 내 용 플랫폼유연성 Windows, linux/unix ( 단, DB 필요 ) Java Builder Ant, Maven1, Maven 2 AnthillPro SCM 알림기능 IDE 연동 버그관리연동 Test tool 연동 라이선스및가격 AccuRev, ClearCase, CA Harvest, CVS, Dimensions, Git, MKS Source Integrity Mercurial,Perforce,PVCS,StarTeam,Subversion,Synergy,Team Foundation Server Vault,ViewVC Email, XMPP/Google, Talk/Jabber IM, MSN IM, RSS, Yahoo IM, System Tray Monitor Eclipse, Visual Studio Bugzilla, ClearQuest, HP Quality Center, JIRA, PVCS Tracker, Rally Team Foundation Server, TeamTrack JUnit, MSTest, NUnit, Selenium, Silk Central Test Manager, TestNG,, Clover Cobertura, Emma for AnthillPro is based on the number of developers working on projects managed by AnthillPro. 제품 내 용 플랫폼유연성 Windows, linux, Mac OS Java Builder Ant, Maven1, Maven 2 SCM 알림기능 IDE 연동 Eclipse, IntelliJ IDEA 버그관리연동 JIRA ( 같은회사제품 ) Test tool 연동 Clover ( 같은회사제품 ) 라이선스및가격 $2,200 ~ $8,000 Bamboo CVS, Subversion, Perforce, ClearCase, Mercurial, Dimension, Git XMPP, Google Talk, E-mail, RSS, Remote API - 11 -
IV. CI 제품 (4) 제품내용 Cruise 플랫폼유연성 Java Builder SCM 알림기능 IDE 연동버그관리연동 Test tool 연동 Windows, linux, Mac OS Ant Subversion, Perforce, Mercurial, Git XMPP, Google Talk, E-mail, RSS, Remote API None ( 자체 client) None None 라이선스및가격 $2,999 제품내용 플랫폼유연성 Windows, Mac OS X, Linux, Solaris, FreeBSD, HP-UX, AIX QuickBuild Java Builder Ant, Maven 1, Maven 2 SCM AccuRev, Clearcase, CVS, Perforce, SourceSafe, StarTeam, Subversion 알림기능 E-mail, XMPP, RSS, Google Talk, Remote API IDE 연동 Eclipse, IntelliJ IDEA, Visual Studio 버그관리연동 JIRA, FindBugs Test tool 연동 CheckStyle,PMD,EMMA,Cobertura 라이선스및가격 $2,999-12 -
V. Hudson - 특징 q 자바로개발된 CI 시스템 q 쉬운설치와실행 Servlet container 와 stand-alone 방식으로실행 q 웹기반의운영환경 직관적인 UI q 다양한기능을편리하게확장 약 140 여개의플러그인제공 q 활발한커뮤니티활동 q 오픈소스 q MIT 라이선스 사용, 수정, 배포가능 - 13 -
V. Hudson - 기능 (1) q 작업 (Job) 관리 작업 : 통합을위해일련의과정을정의한묶음 현재작업의상태를확인 그룹화하여관리 - 14 -
V. Hudson - 기능 (2) q 스케줄링 작업을수행할주기를설정 - crond 설정형식사용 작업간의의존성 ( 순서 ) 설정 q History 관리 통합과정의결과를관리 q SCM (Source Control Management) 소스를수집하기위하여형상관리저장소와연동 CVS, Subversion, Perforce 기본제공 Clearcase, SourceSafe, Bazaar 등은플러그인형태로제공 한작업에여러형상관리저장소등록가능 - 15 -
V. Hudson - 기능 (3) q 빌드툴 소스를빌드하기위한다양한방법제공 Ant, Maven 1, Maven 2 및커맨드방식빌드제공 - 각빌드툴에적합한옵션설정가능 한작업에여러빌드툴적용가능 통합과정에서출력되는모든메시지확인 - 16 -
V. Hudson - 기능 (4) q 단위테스트 JUint 으로수행한단위테스트결과를 Hudson 관리화면에표시 - 17 -
V. Hudson - 기능 (5) q Inspection 테스트 PMD 를이용한 inspection 테스트결과를 Hudson 관리화면에표시 - 18 -
V. Hudson - 기능 (6) q Coverage 테스트 Cobertura 를이용한 coverage 결과를 Hudson 관리화면에표시 - 19 -
V. Hudson - 기능 (7) q 성능테스트 Japex 를이용한성능테스트결과를 Hudson 관리화면에표시 - 20 -
V. Hudson - 기능 (8) q 빌드후작업 Javadoc 생성 zip이나 jar 파일로압축 다른작업통합수행 알림기능 - E-mail 보내기 - MSN과 IRC 등으로메시지보내기 - Twitter에글작성 - Google Calendar q 기타기능 사용자및권한관리 RSS 제공 버그관리툴과연동 - Bugzilla, JIRA, Trac 등 CI Game - 21 -
V. Hudson - 데모 - 22 -
VI. 적용방안 (1) q Hudson 의프로젝트적용방안 효과적인환경구성 - 상호호환성고려 형상관리, 빌드툴, 테스트툴, 이슈관리 - 서버환경고려 서버규모, WAS 및웹서버, 분산서버 - 통합스케줄링 소스수집및통합주기설정 - 통합결과조회방법고려 E-mail, RSS, Google Calendar, 메신저등 프로젝트에서 Hudson 역할정의 - 자동화된빌드 - 자동화된테스트 단위테스트, inspection, coverage, 성능테스트 - 자동화된배포 - 23 -
VI. 적용방안 (2) q Hudson 의프로젝트적용방안 ( 계속 ) ACL (Access Control List) 정의 - 모든개발자 - PM, PL, QA 등 q CI anti-pattern ( 주의점 ) 주기가긴통합은전체적인시스템통합을지연시킨다. 주기가짧은통합은시스템의성능을떨어뜨린다. 잘못된코드를형상관리저장소에업로드하면절대안된다. 오류가발생한빌드는즉시고쳐야한다. 느린 CI 서버는피드백이지연된다. 통합결과를관리자에게확실하게전달하여야한다. 자동으로실제운영서버로배포되는것은심각하게고려해야한다. q 어떤프로젝트부터 Hudson 의도입을시도해야하는가? - 24 -
VII. 결론 배포가능한소프트웨어부재 CI 를이용해통합빌드를자동으로수행 Ant, Maven 등 Cost 늦은결함발견 CI 를이용해자동화된테스트수행 JUnit 프로젝트가시성부재 CI 를이용해개발현황정보전달을자동으로수행 통합보고서및알림기능 저품질의소프트웨어 Convenience CI 를이용해자동화된검사를수행 코딩표준준수, 중복코드등 - 25 -
참고 q Oracle Application Development Framework: Oracle Fusion Applications Teams' Best Practices - 26 -
Q/A - 27 -