continuous integration

36
작작작 : SMILECAT 작작작 : 2015-06-05 작작작 : EGAONEKO.GITHUB.IO Continuous Integration

Upload: donghyun-seo

Post on 13-Aug-2015

60 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: Continuous Integration

작성자 : SMILECAT작 성 일 : 2015-06-05

블 로 그 : EGAONEKO.GITHUB.IO

Continuous Integration

Page 2: Continuous Integration

1. CI 의 정의

Page 3: Continuous Integration

CI ( 지속적인 통합 ) 이란 ?

지속적으로 퀄리티 컨트롤 ( 품질 관리 ) 을 적용하는 프로세스를 실행

모든 개발을 완료한 뒤에 퀄리티 컨트롤을 적용하는 고전적인 방법을 대체하는 방법으로서 소프트웨어의 질적 향상과 소프트웨어를 배포하는데 걸리는 시간을 줄이는데 초점

초기에 그리고 자주 통합해서 통합의 지옥의 함정을 피하는 것을 내포

출처 : 위키백과 - CI

Page 4: Continuous Integration

CI 의 역사

‘ 익스트림 프로그래밍 (Extreme Proramming)’ 커뮤니티에서 나왔으며 , XP 방법론의 지지자인 마틴

파울러 (Martin Fowler) 와 켄트 벡 (Kent Beck) 이 1999 년 경 처음으로 지속적 통합에 대해 글을 작성

출처 : slideshare – Sunny Kwak 지속적인 통합

Page 5: Continuous Integration

CI 시스템을 구축하지 않은 경우 CI 시스템을 구축한 경우

CI 시스템

• 코드를 형상관리 서버에 커밋하면서 품질관리를 없이 통합을 하여 테스트를 진행

• 품질관리를 수행하지 않았기 때문에 잘못된 코드가 반영되면 개발 후반에 모두 장애로 발견

• 형상관리 서버에 Commit 된 코드를 주기적으로 폴링하여 컴파일 , 단위테스트 , 코드 인스펙션 등의 과정을 수행

• 신규 또는 수정된 코드가 결함이 있는지의 여부를 지속적으로 검증

출처 : happystory님의 블로그

Page 6: Continuous Integration

CI 의 장점

위험을 줄여준다 .

반복적인 수작업을 줄여준다 .

언제 어느 때라도 배포할 수 있는 소프트웨어를 생성해낸다 .

프로젝트 가시성을 좋게한다 .

소프트웨어 제품에 대한 보다 큰 자신감을 갖게 해준다 .출처 : slideshare – Yoonki Chang 허드슨을 이용한 지속적 통합

Page 7: Continuous Integration

2. CI 의 구성요소

Page 8: Continuous Integration

CI 의 구성 요소

CI Server

SCM

Build Tool

Test Tool

Test Coverage

Tool

Inspection Tool

Page 9: Continuous Integration

CI SERVER

2. CI 의 구성요소

Page 11: Continuous Integration

CI Server

빌드 프로세스를 관리하는 서버

Jenkins, Hudson, CruiseControl.Net, TeamCity 등

다양한 CI 도구들이 사용되고 있지만 , 무료임에도 안정적이고 , 다양한 플러그인을 사용할 수 있기 때문에 젠킨스와 허드슨이 많이 사용

출처 : happystory님의 블로그, slideshare – Yoonki Chang 허드슨을 이용한 지속적 통합

Page 12: Continuous Integration

Jenkins VS Hudson

Hudson 썬에서 근무하던 고스케 가와구치가 개발 썬에서 관리하던 java.net 에서 관리되는 오픈소스 CI 툴 저작권은 오라클 사에 귀속되어 있는 상태

Jenkins java.net 의 관리 방식에 변화가 생김 java.net 에서 github 로 옮기고 Jenkins 로 이름 변경

출처 : hotdogya님의 블로그, 참조 : okjsp 블로그, okjsp 블로그

Page 13: Continuous Integration

Jenkins 란 ?

open source CI (= Continuous Integration) Tool 이다 .

더 쉽게 말하자면 하나의 프로젝트를 여러 명으로 구성된 한 팀이 작업을 할 때 프로젝트를 리드하는 매니저가 일을 여러 가지로 나눠 팀 멤버들한테 분배하고 팀 멤버들은 각각 할당된 부분을 작업 하게 된다 .

팀 멤버들은 자신이 담당하고 있는 부분의 소스코드를 정기적으로 SVN 과 같은 Version Control System 에 Submit 하는데 이 각각의 팀 멤버들로부터 Submit 된 소스코드들을 정기적으로 통합하는 것을 CI 라고 하고 이것을 시행해주는 프로그램을 CI Tool 이라고 한다 .

출처 : Software Engineering 블로그

Page 14: Continuous Integration

Jenkins 의 기능

빌드 호출 (trigger)

소스 저장소에서 소스 받아오기

자동화된 빌드 및 테스트

리포트 생성 및 통보

배포

출처 : slideshare – Sunny Kwak 지속적인 통합

Page 15: Continuous Integration

Jenkins 의 요구사항

WAS 서버 (Apache Tomcat, WebLogic 등 )

빌드 도구 (Maven, Ant 등 )

소스 저장소 도구 (Git, SVN, CVS 등 )

설치 방법은 링크 참조 ( 젠킨스 설치 및 설정)

출처 : slideshare – Sunny Kwak 지속적인 통합

Page 16: Continuous Integration

SCM

2. CI 의 구성요소

Page 17: Continuous Integration

SCM

소스코드 형상관리 시스템 (Source Code Management)

소스코드의 개정과 백업 절차를 자동화하여 오류 수정 과정을 도와줄 수 있는 시스템

여러사람이 같은 프로젝트에 참여할 경우 , 각자가 수정한 부분을 팀원 전체가 자동으로 동기화할 수 있는 시스템

Subversion, Git, Mercurial 등

출처 : happystory님의 블로그

Page 18: Continuous Integration

SCM

SVN 과 Git 이 가장 널리 사용

SVN(Subversion) 자유 소프트웨어 버전 관리 시스템 제한이 있던 CVS 를 대체하기 위해 개발 현재는 아파치 최상위 프로젝트

Git 분산 버전 관리 시스템 최초에는 리누스 토르발스가 리눅스 커널 개발에 이용하려고

개발하였으며 , 현재는 다른 곳에도 널리 사용 Github

출처 : 위키백과 – 서브버전, 깃

Page 19: Continuous Integration

BUILD TOOL

2. CI 의 구성요소

Page 20: Continuous Integration

Build Tool

컴파일 , 테스트 , 정적분석 등을 실시해 동작 가능한 소프트웨어를 생성

Ant, Maven, Gradle, MSBuild, Make

빌드 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는

과정을 말하거나 그에 대한 결과물을 일컫는 것 가장 중요한 단계는 소스코드 파일이 실행코드로 변환되는 컴파일 과정

참고 빌드의 중요성 (http://softwaredev.tistory.com/10) 빌드와 컴파일의 차이 (http://allofsoftware.net/19)

출처 : happystory님의 블로그

Page 21: Continuous Integration

Build Tool

Ant(Apache Ant) 자바 프로그래밍 언어에서 사용하는 자동화된 소프트웨어 빌드 도구 유닉스나 리눅스에서 사용되는 make 와 비슷하나 자바언어로

구현되어 있어 자바 실행환경이 필요하며 자바 프로젝트를 빌드하는데 표준으로 사용

XML 을 사용하여 환경구성

Maven(Apache Maven) 자바용 프로젝트 관리 도구 Apache Ant 의 대안으로 만들어짐 아파치 라이선스로 배포되는 오픈 소스 소프트웨어

출처 : 위키백과 – 아파치 앤트, 아파치 메이븐

Page 22: Continuous Integration

Build Tool

Gradle 지금까지 자바 진영에서 많이 사용해온 Ant 빌드 툴과 Maven

빌드 툴의 단점은 버리고 , 장점은 취한 빌드 툴 Ant 와 Maven 빌드 툴의 기능을 모두 포함 Ant 의 자유도와 Maven 의 관례의 장점을 모두 흡수 Ant 와 Maven 빌드 툴 모두 가지고 있었던 가장 큰 단점인

XML 에 대한 이슈를 Groovy 라는 언어를 사용해 해결

출처 : SLiPP – Gradle 설정 파일 및 기본 개념

Page 23: Continuous Integration

TEST TOOL

2. CI 의 구성요소

Page 24: Continuous Integration

Test Tool

작성된 테스트 코드에 따라 자동으로 테스트를 수행해주는 도구로 , 빌드 툴의 스크립트에서 실행

JUnit, CppUnit, CppTest, MSTest, Selenium

단위 테스트 테스트 대상이 되는 코드 기능의 아주 작은 특정 영역을 실행해 보는

것으로 , 개발자가 작성한 테스트 코드로 특정 메소드를 실험해보는 것이 일반적

출처 : happystory님의 블로그

Page 25: Continuous Integration

Test Tool

JUnit 단위 테스트 도구 외부 테스트 프로그램 ( 케이스 ) 을 작성하여 System.out 으로 번거롭게

디버깅하지 않아도 되게 해줌 프로그램 테스트 시 걸릴 시간도 관리할 수 있게 해주며 오픈소스이며 ,

플러그인 형태로 Eclipse 에 포함 하나의 jar 파일로 구성되어 있으며 , 사용법이 간단 보이지 않고 숨겨진 단위 테스트를 끌어내어 정형화시켜 단위 테스트를 쉽게

해주는 테스트용 Framework JDK 1.4 에서 추가된 assertXXX 를 사용하여 Test 를 진행 테스트 결과를 확인하는 것 이외에 최적화된 코드를 유추해내는 기능도 제공 테스트 결과를 단순한 텍스트로 남기는 것이 아니라 , Test 클래스로 남김 테스트 방법 및 클래스의 Histroy 를 넘겨줄 수 있음

출처 : NEXTREE

Page 26: Continuous Integration

TEST COVERAGE TOOL

2. CI 의 구성요소

Page 27: Continuous Integration

Test Coverage Tool

테스트 코드가 대상 소스 코드에 대해 어느정도 커버하는지 분석하는 도구

개발자가 작성한 테스트코드가 테스트 대상 소스코드에 대해서 어느정도 테스트를 수행하는지를 코드 라인과 백분율을 통해 리포팅하는 것으로 단위테스트 수행 시 테스트 커버리지를 분석하기 위해여 부가적으로 사용하는 툴

Emma, Cobertura, TestCocoon

출처 : happystory님의 블로그

Page 29: Continuous Integration

INSPECTION TOOL

2. CI 의 구성요소

Page 30: Continuous Integration

Inspection Tool

프로그램을 실행하지 않고 , 소스코드 자체로 품질을 판단할 수 있는 정적분석 도구

코딩 표준 준수 검사 , 코드 메트릭 측정 , 중복코드 검사 , 코드 인스펙션 검사 등이 있음

CheckStyle, FindBugs, Cppcheck, Valgrind

출처 : happystory님의 블로그

Page 31: Continuous Integration

Inspection Tool

Page 32: Continuous Integration

3. 빌드 도구 , 개발 환경 구축하기

Page 33: Continuous Integration

1. CI Server

Jenkins 설치

설치 방법

• 젠킨스 홈페이지에서 WAR 파일 다운로드

• 톰캣 등의 WAS 에 설치 및 실행 (1)

• 젠킨스 WAR 파일을 직접 실행 (2)

• (1), (2) 중 선호는 방식으로 실행

출처 : slideshare – Sunny Kwak 젠킨스 설치 및 설정

Page 34: Continuous Integration

2. IDE + Build Tool + SCM• IDE 를 선정

• Build Tool 선정

• SCM 선정 선정

IDE Eclipse IntelliJ

Build Tool Ant Maven Gradle

SCM SVN Git

Page 35: Continuous Integration

3. Test Tool• 테스트 코드를 작성

• Build Tool 의 스크립트에서 실행

Maven

Gradle

Page 36: Continuous Integration

thank you