Using Hudson / Jenkins Continuous Integration 2013.11.18 장윤기 (yoonki.chang@gmail.com)
목차 1. 지속적통합이해하기 2. 스스로적용하기 3. 다른사람들의활용방식 4. 질의응답 2 Copyright 2013. Created by Yoonki Chang (yoonki.chang@gmail.com)
1 1.1 지속적통합이해하기 왜소프트웨어프로젝트는실패하나요? 1.2 실패를줄일수있나요? 1.3 또배워야하나요? 1.4 무엇부터어떻게시작할까요? 1.5 최종목표는무엇인가요?
1.1 왜소프트웨어프로젝트는실패하나요? 소프트웨어산업과다른산업과의차이점 i. Software Is Complex ii. Software Is Abstract iv. Technology Changes Rapidly vi. Technology Is a Vast Domain iii. Requirements Are Incomplete v. Best Practices Are Not Mature vii. Technology Experience Is Incomplete ix. Repetitive Work Is Automated viii. Software Development Is Research x. Construction Is Actually Design xi. Change Is Considered Easy xii. Change Is Inevitable * 출처 : Software Project Secrets. Why Software Projects Fail. Apress 2005 4 Copyright 2013. Created by Yoonki Chang (yoonki.chang@gmail.com)
1.2 실패를줄일수있나요? 12 Practices of extreme Programming XP 는개발본연의임무를강조한 Agile 방법론임 주요개선활동 The Planning Game Testing Pair Programming Refactoring Simple design Collective code ownership Continuous integration On-site customer Small release 40-hour week Coding standard System metaphor 활용도구 포스트잇 개발툴 (Eclipse/Jdeveloper...) 형상관리 문서저작도구 CI 도구 << 인식전환 >> 5 Copyright 2013. Created by Yoonki Chang (yoonki.chang@gmail.com)
1.2 실패를줄일수있나요? 위험을줄여준다. 특정소스코드의컴파일오류로전체소프트웨어컴파일이되지않는문제를빠르게대처할수있음 반복적인수작업을줄여준다 개발자의반복적이고지루한작업을자동화하여개발자는개발에만집중할수있도록함 코드의변경에대해자동적으로단위테스트및영향분석을레포팅하고이를통해소프트웨어의품질을향상시킬수있음 언제어느때라도배포할수있는소프트웨어를생성해낸다 빌드와배포를반복적으로수행함으로소프트웨어를테스트할수있는기회를더욱높일수있으며이로인해소프트웨어품질이높아짐 문제상황발생시이를빠르게피드백받고즉각처리할수있는환경을마련함 프로젝트가시성을좋게한다 소프트웨어제품에대해보다큰자신감을갖게해준다. 6 Copyright 2013. Created by Yoonki Chang (yoonki.chang@gmail.com)
1.3 또배워야하나요? 우리가하는일을줄여줄수있다면도구를배우는것을두려워해서는안됨 도보이동대중교통이동자가용이동 소요시간 : 28 분 총거리 : 1.8 km 소요시간 : 19 분 총거리 : 2.0 km 소요시간 : 9 분 총거리 : 1.8 km 7 Copyright 2013. Created by Yoonki Chang (yoonki.chang@gmail.com)
1.4 무엇부터어떻게시작할까요? 어렵게생각하지말고쉽게본인이필요하다고생각되는영역부터하나하나적용해보는것이좋음 CI 도구를개발자를통제하기위한도구로생각해서는안되며생산성향상을위한도구로사용해야함 개발자측면 관리자측면 스스로해야할것 1. 쉬운 CI 도구선정 2. 빌드자동화 ( 형상관리 + ANT / MAVEN) 3. 배포자동화 (TOMCAT, FTP 등 ) 4. 테스트자동화 (Junit 등 ) 5. 소스코드품질검사자동화 (PMD 등 ) 요구해야할것 1. CI 적용을위한시간확보 2. 배우기위한자료 ( 책, 교육등 ) 3. 형상관리, CI 도구등을위한장비확보 스스로해야할것 1. 인내력을가지고기다림 2. CI 는생산성향상도구 ( 통제도구아님 ) 3. CI 를위해투자하는시간, 돈 4. 고성능하드웨어장비를지급하는여유 요구해야할것 1. 개발자인식전환 2. 단순반복작업이아닌생산적인작업에시간을투자 3. 가치를높이기위한노력 8 Copyright 2013. Created by Yoonki Chang (yoonki.chang@gmail.com)
1.5 최종목표는무엇인가요? CI 도구는최초고려된목적외에다양한형태로확대되고있음 CI 도구를적용할때에는목표와목적을정확히하고로드맵에따라순차적으로적용해갈필요가있음 나 를위한자동화 인식전환및기초환경마련 환경마련 통합관리체계확보 1. 개발생산성향상에대한고민 2.XP 방법론에따른 CI 도구적용고려 3.CI 도구를통해얻고자하는목표수립 4. 개발프로세스에 CI 도구사용에대한방안마련 5. 모든소스코드관리는형상관리로이관 6.CI 도구설치및사용환경마련 7.CI 도구를이용한빌드및검사, 테스트자동화환경마련 8. 개발에서배포까지자동화환경마련 9. 단계별레포트자동화 10. 전체개발영역으로의확대 9 Copyright 2013. Created by Yoonki Chang (yoonki.chang@gmail.com)
2 2.1 스스로적용하기 CI 사용을위한 PATH 2.2 CI 도구선택하기 2.3 형상관리중심으로작업하기 2.4 빌드자동화하기 2.5 배포자동화하기 2.6 테스팅자동화하기 2.7 레포팅및피드백 2.8 더욱발전을위해서
2.1 CI 사용을위한 PATH CI 를활용하고자하는 PATH 를작성하고해당 PATH 에따라어떠한적용을할지고려할필요있음 Planning 시작적용목표수립적용단계수립적용방안마련 CI 도구선택 Iteration CI 설치 CI 작업정의 최신코드업데이트 단위테스트개발 (Junit) App 개발 소스코드커밋 형상관리설치 빌드연동 배포연동 기능테스트연동 품질검사연동 레포팅 결과피드백 종료 11 Copyright 2013. Created by Yoonki Chang (yoonki.chang@gmail.com)
2.2 CI 도구선택하기 한번선택한 CI 도구를나중에변경하기위해서는많은시간과노력이필요하므로도구선택작업은 CI 시작을위한매우중요한단계임 일반적인경우 Free Software 인 Jenkins / Hudson 으로도충분히커버가가능함 Free Software 무료혹은특정조건하에비용지불없이사용할수있는소프트웨어 Jenkins / Hudson 을일반적으로사용함. 특정목적을위해커스텀개발이필요할수있음 Commercial Software 상용제품으로대부분가격이상당히고가임 기능적으로관리적으로많은장점을가지고있음 Jetbrains TeamCity, Atlanssian Bamboo, IBM Build Forge, MS Team Build 등이유명 12 Copyright 2013. Created by Yoonki Chang (yoonki.chang@gmail.com)
2.2 CI 도구선택하기 CI 도구를선정시고려해야할평가기준 평가요소 형상관리연계 빌드도구연계 테스트도구연계 설명 CVS, Subversion, IBM ClearCase, Serena Dimension, CA Harvest, Borland StarTeam 등과의연동기능 형상관리서버의변경을감지하고이를지속적통합작업과연계할수있는기능 현존하는빌드도구혹은빌드스크립트와연동할수있는기능 ANT, MAVEN, NAnt, MSBuild 그리고 make 같은도구와연동할수있는기능 유닉스쉘스크립트나윈도우배치커맨드와연동할수있는기능 xunit 계열의단위테스트도구와연동기능 TQM 을목표로하는대단위테스트도구들과의연동성 ( 예, HP QTP) 검사도구통합 코드에대한검사, 보안에대한검사, SQL 검사를위한도구와의연계기능 피드백및레포팅 분산시스템 통합절차의다양성 지속적통합서버가연동하는형상관리, 빌드도구, 테스트도구, 검사도구등과연동하여해당수행결과를확인할수있는기능 확인된수행결과를적합한사람들에게이메일, SMS, 메신져등으로피드백하는기능 분산환경지원하는기능. 메인서버와슬레이브서버를설정할수있는기능 특정한운영체제와하드웨어에제한없이윈도우, 유닉스, 리눅스등을지원 지속적통합절차를정의하기위한다양한방법을제공 작업에대한스케쥴링기능과형상관리변경을통한작업실행기능을제공 권한관리 개발자혹은관리자에따른권한관리기능. 진행사항모니터링 지속적통합도구의상태를실시간으로확인할수있는기능. 통합 Dashboard 확장가능성 기본제공기능외에특정한목적으로확장및변경가능한기능 * 출처 : 허드슨을이용한지속적통합. 인사이트. 2012 13 Copyright 2013. Created by Yoonki Chang (yoonki.chang@gmail.com)
2.3 형상관리중심으로작업하기 소스코드에대한형상관리를적용할경우여러가지주의해야할항목들이존재 개인이만들어내는소스코드는결코개인의사유자산이아니다. 모든소스코드는공유를기본원칙으로한다. 형상관리에소스코드를커밋한다는의미는해당소스코드에결함이없고실행이가능함을의미한다. 형상관리서버는개인의자료백업서버가아니다. 보안등의이유로공유가제약되는경우라도제약을최소화할수있는방향으로정책을마련한다. 지난번에계산알고리즘소스코드좀공유해줄래? 그거소스코드나없는데 얼마나고생한건데내가널주냐 14 Copyright 2013. Created by Yoonki Chang (yoonki.chang@gmail.com)
2.3 형상관리중심으로작업하기 모든 CI 활동의중심에는모든소스코드는형상관리서버에의해서관리되고있다는전제를가지고있음 형상관리커밋단위로 CI 자동실행하도록설정 주기적으로형상관리에서체크아웃후레포팅하도록설정 형상관리서버 허드슨서버 개발자 전처리 저장소반영 허드슨작업 갱신 커밋요청 후처리 작업호출 작업공간 저장 저장소 15 Copyright 2013. Created by Yoonki Chang (yoonki.chang@gmail.com)
2.4 빌드자동화하기 컴파일은가장기초적이며가장확실한 1 단계버그 FIX 도구 프로그램이클수록빌드오류의확률이높아지며이를지속적으로확인해야함 통합개발도구의자동빌드기능을 OFF 해놓는경우 : PC 에서빌드에계속성공하고있다고착각하게되는경우가있다. 프로젝트표준빌드를자기자신만의방식으로변경해서사용한다. 정상적인모든소스코드를커밋하지않는경우이다. 하나의소스코드에여러명이동시에개발하는경우오류에대한책임을서로미루게되며영원히해결되지않는컴파일에러상황에도달할수있다. 제 PC 에서는컴파일잘되는데요. 서버문제아니에요? 16 Copyright 2013. Created by Yoonki Chang (yoonki.chang@gmail.com)
2.4 빌드자동화하기 빌드는이클립스와같은개발도구에의해서자동화해주고있으나모든환경 ( 특히서버환경 ) 에서이클립스를사용할수있을거라는기대를해서는안됨 대부분의 CI 도구는빌드기능을제공하지않음 빌드요청 1 배포서버 Hudson Master 8 대상서버 Hudson Slave 2 빌드서버 Deploy Agent 9 Deploy Script DEPLOY 3 Deploy Script CHECKOUT 5 COMPILE 6 PACKAGING 4 형상관리서버 7 SEND 17 Copyright 2013. Created by Yoonki Chang (yoonki.chang@gmail.com)
2.5 배포자동화하기 배포는소프트웨어를서비스하기위한가장중요한단계이며서비스하기이전개발자 / 설계자 / 관리자 / 고객에의한테스트를위한중요항목임 개발한프로그램을운영데이터로테스트하게서버로배포좀해주세요 우리프로젝트는배포는밤 12 시에한번만한다. 밤 12 시이후에테스트하던지내일아침에해!!! 18 Copyright 2013. Created by Yoonki Chang (yoonki.chang@gmail.com)
2.5 배포자동화하기 지속적으로서버에빌드한결과물을배포해서확인할수있는환경및체계마련하고빠르게자주배포가될수있도록시스템을구성해야함 개발자 개발계 검증계검증계 운영계 형상항목 CHECKOUT 형상항목 CHECKOUT 형상항목 CHECKOUT 작업요청 현업 / IT N COMPILE 대상 Y COMPILE 성공 N N COMPILE 대상 Y COMPILE 성공 N N COMPILE 대상 Y COMPILE 성공 N Y Y Y PACKAGING PACKAGING PACKAGING DEPLOY DEPLOY DEPLOY N 단위테스트성공 Y N 통합테스트성공 Y 이관종료 검증계이관요청 운영계이관요청 검증계이관 Y 승인 N 19 Copyright 2013. Created by Yoonki Chang 이관 (yoonki.chang@gmail.com) 종료 운영계이관승인 N 이관종료 Y
2.6 테스팅자동화하기 테스팅에대한인식전환필요 TDD 방법론까지는아니더라도단위테스트를자동화하고사람에의한테스트가아닌시스템에의한자동테스팅환경을확보하는것이중요 지속적통합에서가장설득하고적용하기어려운부분중하나로기술적인문제가아닌절차와인식의문제임 테스트는단위테스트 / 통합테스트 / 인수테스트기간에하고지금은개발에전념해야겠다. 개발이지연됐네. 어차피테스팅기간에개발하면되니깐그때까지는여유가있네 20 Copyright 2013. Created by Yoonki Chang (yoonki.chang@gmail.com)
2.6 테스팅자동화하기 xunit, Cactus, TestNG 등의테스트도구를이용해서용도에맞는자동화수행 코드커버리지도구를이용해서단위테스트가전체어플리케이션의어느부분까지적용되었는지지속적으로확인하기 Checkstyle, PMD, FindBugs 와같은소스코드검사도구를이용해서자동화수행 Unit 테스트를위한테스트프로그램개발을시간낭비라고생각해서는안됨. 테스트자동화를통해테스트노력을 10% 만줄여도큰성과라는생각으로접근해볼필요있음 Unit 테스트결과 Code Coverage 결과소스품질결과 21 Copyright 2013. Created by Yoonki Chang (yoonki.chang@gmail.com)
2.7 레포팅및피드백 CI 의최종목적은자동화를통해소프트웨어에대한현황과피드백을지속적으로받는것임 개발환경에서개발자혹은관리자들이가장많이사용하는도구와 CI 도구를연동할필요있음 레포팅과피드백을 #139 차 CI 작업에서단위테스트실패율이높던데확인했어? 네. 이클립스 Mylyn 에서결과보고확인중이에요. 다음차수 CI 작업에서는해결될겁니다. 22 Copyright 2013. Created by Yoonki Chang (yoonki.chang@gmail.com)
2.7 레포팅및피드백 결과를체계화하기위해레포팅에대해서고려 빠른피드백을받기위해다양한디바이스혹은도구와연계해서별도의작업없이도결과를쉽고빠르게확인할수있도록환경마련 피드백이스팸으로인식하지않도록필요한사람에게정확한내용을전달할수있도록설계필요 개발자가많이보는개발툴, 이메일, 아웃룩 (RSS), 웹브라우져같은도구와 CI 도구를연계필요 Outlook 연동 개발툴연동 E-mail 연동 23 Copyright 2013. Created by Yoonki Chang (yoonki.chang@gmail.com)
2.8 더욱발전을위해서 CI 는특정한제품및솔루션이아닌 개발자 를자동화하기위한일련의생산성향상행위임 허드슨 / 젠킨스등에제약을받지말고좀더발전적인모습으로응용해나갈필요있음 통합개발환경 (Eclipse) CI (Hudson/Jenkins) Issue Tracking (Redmine) Version Control (Subversion,Git) Build (MAVEN/ANT) Collboration (Groupware/SNS) 24 Copyright 2013. Created by Yoonki Chang (yoonki.chang@gmail.com)
3 3.1 어떤식으로활용하고있는가? OKJSP 3.2 NHN 3.3 SK C&C
3.1 OKJSP Jenkins 이용 OKJSP 블로그인 http://okjsp.tistory.com/tag/hudson 에접속해보면 Hudson 과관련해서 OKJSP 에적용한내용을볼수있음 http://www.okjsp.pe.kr:8080/ 에접속해보면 OKJSP 의 Hudson Dashboard 를볼수있음 26 Copyright 2013. Created by Yoonki Chang (yoonki.chang@gmail.com)
3.2 NHN HUDSON 이용 2011 년 JCO 컨퍼런스에서 오픈소스를활용한 NHN 배치처리플랫폼 세션에서 HUDSON 을이용한배치어플리케이션관리에대해서소개하고있음 http://www.slideshare.net/knight1128/batch-8508863 에서발표자료확인할수있음 주로 CI 도구보다는배치어플리케이션에대해선스케쥴러기능으로활용 업무요건을맞추기위해 HUDSON 플러그인을개발해서활용 빌드, 테스트, 배포라는측면에서잘설명되어있음 27 Copyright 2013. Created by Yoonki Chang (yoonki.chang@gmail.com)
3.3 Big 3 SI 기업 Big 3 SI 기업에서기존 Waterfall 방식이아닌 Agile 방법론을프로젝트에적용하고있음. (Waterfall + Agile 형태 ) 개발표준및 CI 도구적용은거의필수적인대세로정착하고있는상황임 Agile 방법론특히 CI 는일반소프트웨어개발뿐만아니라 SI 프로젝트에서도필수방법론의일부로인식되고있음 SK C&C Agile 방법론 삼성 SDS AnyFrame LG CNS 뱅킹플래폼 28 Copyright 2013. Created by Yoonki Chang (yoonki.chang@gmail.com)
참고자료 허드슨을이용한지속적통합, 인사이트, 2012 Software Secrects : Why Software Projects Fail. Apress. 2005 지속적인통합, 위키북스, 2007 NHN 사례 : http://www.slideshare.net/knight1128/batch- 8508863 SK C&C Agile 방법론 : http://www.slideshare.net/k16wire/agile-practices-v10 LG CNS 스마트뱅킹플랫폼 : http://www.entrueworld.com/html/program/download/ew201 1_Track%201_Session%203.pdf 29 Copyright 2013. Created by Yoonki Chang (yoonki.chang@gmail.com)
30 Copyright 2013. Created by Yoonki Chang (yoonki.chang@gmail.com) Demo
31 Copyright 2013. Created by Yoonki Chang (yoonki.chang@gmail.com) Q & A
지속적통합은사람을위한것 지속적통합을하기위해 사람을희생시켜서는안됨