본문 바로가기

0x01 Programming/0x0ff Etc

프로젝트 자동화 환경 구축(SVN, Redmine, Ant, Jenkins with Junit & PMD)

1       VCS

VCS Revision Control로 문서 또는 프로그램의 Version Control Source Control을 관리해주는 프로그램이다.(http://en.wikipedia.org/wiki/Revision_control)

전통적인 SVN, CVS  Distributed revision control Git 또는 Mercurial이 많이 쓰인다.




1.1      SVN

서브버전(Subversion) 자유 소프트웨어 버전 관리 시스템이다. 명령행 인터페이스에서 사용하는 명령어를 따서 “SVN”이라고 줄여서 부르기도 한다. 제한이 있던 CVS를 대체하기 위해 2000년부터 콜랩넷에서 개발되었다.[1] 현재는 아파치 최상위 프로젝트로서 전세계 개발자 커뮤니티와 함께 개발되고 있다.

서브 버전은 서버-클라이언트 모델을 따른다. 서버는 작업하는 컴퓨터내에 둘 수도 있고, 전산망에 연결된 별도의 컴퓨터에 두고 사용할 수도 있다. 서브버전 서버와 클라이언트는 http, https, svn, svn+ssh의 규약으로 통신한다.

SVN Wiki




1.2      Visual SVN

Windows를 위한 Subversion 기반으로 작성된 VCS 프로그램이다.




2       Issue Tracker

이슈 관리 시스템(Issue Tracking System)은 버그, 요구사항, 작업내용 등이 있을 때 해당 시스템에 게시물 형태로 올리고 개발자,
테스터들이 작업 진행상황을 기록하는 시스템을 말합니다.

이슈관리시스템은 자유 소프트웨어 버전 관리 시스템이다. 명령행 인터페이스에서 사용하는 명령어를 따서 “SVN”이라고 줄여서 부르기도 한다. 제한이 있던 CVS를 대체하기 위해 2000년부터 콜랩넷에서 개발되었다.[1] 현재는 아파치 최상위 프로젝트로서 전세계 개발자 커뮤니티와 함께 개발되고 있다.

서브 버전은 서버-클라이언트 모델을 따른다. 서버는 작업하는 컴퓨터내에 둘 수도 있고, 전산망에 연결된 별도의 컴퓨터에 두고 사용할 수도 있다. 서브버전 서버와 클라이언트는 http, https, svn, svn+ssh의 규약으로 통신한다.




2.1      Redmine

Redmine 오픈소스 프로그램으로 웹기반의 프로젝트 관리  버그 추적 기능을 제공하는 도구이다. 화면기반의 프로젝트 관리에 도움이 되도록 달력과 간트 차트를 제공하고 일정관리 기능을 제공한다. Redmine은 통합된 프로젝트관리 기능과 이슈추적, 여러가지 형상 관리 기능을 제공한다.

Redmine의 디자인은 비슷한 기능을 가지는 오픈소스 프로그램인 Trac에 영향을 많이 받았으며 루비 레일즈에 기반하여 작성되었고 멀티 플랫폼을 지원하며 여러가지 종류의 데이터베이스를 지원한다.

Redmine wiki




3       Build Automation Tool

3.1      Apache Ant

Apache Ant 자바 프로그래밍 언어에서 사용하는 자동화된 소프트웨어 빌드 도구이다. 유닉스 리눅스에서 사용되는 make와 비슷하나 자바언어로 구현되어 있어자바 실행환경이 필요하며 자바 프로젝트들을 빌드하는데 표준으로 사용된다.

make와 눈에 띄는 가장 다른 부분은 빌드를 위한 환경구성을 XML 파일을 사용한다는 점이다. 기본적인 빌드 파일명은 build.xml 이다.

로고는 이름(ANT)에 따라 개미 모양으로 만들어졌으나 이는 Another Neat Tool 약어라고 한다. [1]

최초 빌드 도구로서 제작되었으나 점점 많은 기능이 추가되면서 빌드와 배포, 유닛 테스트 등을 포함하는 통합 툴로서 발전되고 있다.

Aapache Ant wiki




4       CI

소프트웨어 공학에서, 지속적인 통합(continuous integration, CI)은 지속적으로 퀄리티 컨트롤을 적용하는 프로세스를 실행하는 것이다. - 작은 단위의 작업, 빈번한 적용. 지속적인 통합은 모든 개발을 완료한 뒤에퀄리티 컨트롤을 적용하는 고전적인 방법을 대체하는 방법으로서 소프트웨어의 질적 향상과 소프트웨어를 배포하는데 걸리는 시간을 줄이는데 초점이 맞추어져 있다.

make와 눈에 띄는 가장 다른 부분은 빌드를 위한 환경구성을 XML 파일을 사용한다는 점이다. 기본적인 빌드 파일명은 build.xml 이다.

로고는 이름(ANT)에 따라 개미 모양으로 만들어졌으나 이는 Another Neat Tool 약어라고 한다. [1]

최초 빌드 도구로서 제작되었으나 점점 많은 기능이 추가되면서 빌드와 배포, 유닛 테스트 등을 포함하는 통합 툴로서 발전되고 있다.

지속적인통합 wiki




4.1      Jenkins

Jenkins 2011년 오라클의 상표권 침해 문제로 인해 Hudson에서 명칭이 바뀌어 배포되는 지속적 통합관리 툴 중 하나이다. 이름만 바뀌었지 기능 향상과 지원은 계속 유지되고 있다.

반복되는 작업의 실행을 모니터링하는 프로그램으로 주로 프로그램을 빌딩하거나 주기적으로 정해진 작업을 실행한다.




4.2      JUnit

JUnit Java언어를 위한 Unit Testing Framework이다. Junit TDD(Test-Driven-Development)에서 중요한 툴이며, 또한 xUnit 이라 알려진 Testing Framework 종류 중 한가지이다.

Junit Wiki




4.3      PMD

PMD JAVA Source Code를 해석하여 정해진 RuleSet을 사용하여 잠재적인 문제를 찾아주는 툴이다.

l  가능한 버그 추적(ex. Empty try/catch/finally/switch blocks)

l  쓰이지 않는 코드(ex. Local Variables, parameters & private methods)

l  Empty if/while statements.

l  중복된 코드

등 에러와 비효율적인 코드를 찾아내어 더 나은 코드를 작성할 수 있도록 도와준다.

PMD Wiki

 



5       Tutorial

Tutorial Visual SVN, Redmine, Jenkins를 연동하여 Build Build Junit PMD 결과물을 Jenkins에서 보는 것을 목표로 한다.

Tutorial Eclipse가 설치 되어있는 상태를 전제로 한다.

SVN Server로는  VisualSVN(Version 2.5.9) Client Eclipse Plug-in    Subversive SVN Team Provider을 사용하였다.

VisualSVN http://www.visualsvn.com/ 에 가서 다운받아 설치한다.

설치 방법은 블로그(http://www.phpk.org/archives/181) 에 상세히 소개 되어있다.

SVN 설치 후에는 Tutorial용 프로젝트를 생성한다. 간단하게 HelloWorld를 생성하여 Say Hello를 출력하는 Main Class를 작성한다.

그리고 해당 프로젝트를 SVN Client를 통해 Server Check-in한다.

SVN. + Redmine연동 테스트를 해보자. 테스트는 Task 생성 후, Commit처리시 Comment작성하여 완료 체크로 이루어진다.

그 전에 Redmine에 간단한 설정을 해주어야 한다. 특정 단어가 들어간 경우에 특정 상태, 진척도로 변경 가능하도록 해보자.

여기서는 end가 들어갔을 때 완료 100%로 만들도록 설정한다.

전체 설정에 저장소 탭에서 설정한다. 그리고 Eclipse에서 코드를 등록한 키워드와 일감 번호를 Comment에 적어 Commit하게 되면 아래의 그림과 같이 테스트를 성공 할 수 있다.

이제 CI를 위해 Ant Jenkins 순으로 설치를 해보자. Anthttp://ant.apache.org/

젠킨스는 http://jenkins-ci.org/  에서 차례도록 다운받아 설치하자. Jenkins를 설치하는 방법에는

1, Standalone

2. Tomcat + Jenkins.war import

이상 두가지가 있는데 여기서는 2번을 택해 진행하겠다.

(1번은 설치파일을 받아 진행하면 어려움이 없다.)

Jenkins를 설치하고 Jenkins관리에서 JAVA Path Ant Path를 설정해주면 간단한 설정이 끝난다.

앞서 만든 HelloWorld 프로젝트를 위해 새로운 Job을 만들자.

젠킨스는 http://jenkins-ci.org/  에서 차례도록 다운받아 설치하자. Jenkins를 설치하는 방법에는

1, Standalone

2. Tomcat + Jenkins.war import

이상 두가지가 있는데 여기서는 2번을 택해 진행하겠다.

(1번은 설치파일을 받아 진행하면 어려움이 없다.)

 

Jenkins를 설치하고 Jenkins관리에서 JAVA Path Ant Path를 설정해주면 간단한 설정이 끝난다.

이제 Jenkins + SVN 연동 테스트를 위해 build.xml작성하여 프로젝트 Root Commit, Ant를 통한 자동 Build가 이루어지도록 해보자

<project name="HelloWorld" basedir="." default="main">

        <description>

            Print 'Say Hello' to Console

        </description>

        <property name="src.dir" value="src" />

        <property name="build.dir" value="build" />

        <property name="classes.dir" value="${build.dir}/classes" />

        <property name="jar.dir" value="${build.dir}/jar" />

        <property name="report.dir" value="${build.dir}/report" />

        <property name="main-class" value="com.sds.etl.vasco.HelloWorld" />

 

        <target name="clean">

               <delete dir="${build.dir}" />

        </target>

        <target name"compile">

               <mkdir dir="${classes.dir}" />

               <mkdir dir="${report.dir}" />

               <javac srcdir="${src.dir}" destdir="${classes.dir}"/>

        </target>

        <target name="jar" depends="compile">

               <mkdir dir="${jar.dir}" />

               <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">

                       <manifest>

                       <attribute name="Main-Class" value="${main-class}" />

                       </manifest>

               </jar>

        </target>

        <target name="run" depends="jar">

               <java jar="${jar.dir}/${ant.project.name}.jar" fork="true" />

        </target>

 

        <target name="clean-build" depends="clean,jar" />

        <target name="main" depends="clean,run" />

</project>

작성된 파일을 프로젝트 Root Commit하고 Successful Build가 이루어지길 바란다.

 

여기에 Junit 결과와 PMD 결과를 Jenkins에서 볼 수 있도록 설정해보자.

Junit 관련 Plugin은 기본 설치되어 있지만, PMD 관련 Plugin은 추가적으로 설치해주어야 한다. 설정의 플러그인 관리를 통해 Static Analysis Utilities , PMD Plug-in , Analysis Collector Plugin 을 설치하자.

혹시 자동설치가 안된다면 관련 Pluginhttp://updates.jenkins-ci.org/download/plugins/ 을 통해 받아 수동설치가 가능하다.

기존 Build.xml JUnit PMD실행 스크립트를 작성하고,

------------------------중략----------------------------

<property name="pmd.home" value="C:\pmd-src-5.0.3" />

        <path id="junit.class.path">

               <pathelement location="lib/junit.jar" />

               <pathelement location="lib/hamcrest.jar" />

               <pathelement location="${build.dir}" />

               <pathelement location="${classes.dir}" />

        </path>

------------------------중략----------------------------

        <target name="jar" depends="compile">

               <mkdir dir="${jar.dir}" />

               <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">

                       <manifest>

                       <attribute name="Main-Class" value="${main-class}" />

                       </manifest>

               </jar>

        </target>

------------------------중략----------------------------

        <!-- Main Build -->

        <target name="main" depends="clean,run, junit, pmd_4.3" />

        <!-- JUnit Ant 설정 -->

        <target name="junit" description="Perfrom JUnit Test ">

               <junit printsummary="on" fork="yes" haltonfailure="yes">

                   <!-- JUnit 관련 ClassPath 설정 -->

                       <classpath refid="junit.class.path" />

                       <formatter type="xml" />

                       <!-- Bacth형으로 Test 실행 -->

                       <batchtest todir="${report.dir}">

                              <fileset dir="${src.dir}">

                                      <include name="**/*Test*.java" />

                              </fileset>

                       </batchtest>

               </junit>

        </target>

        <path id="pmd.classpath">

  <pathelement location="${pmd.home}" />

  <fileset dir="${pmd.home}/lib" includes="*.jar" />

  </path>

 <!--  pmd Ant 실행 파일 설정   -->

 <!--  pmd Ant Target 설정 Target =pmd 설정.  -->

 <target name="pmd_4.3" >

  <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask" classpathref="pmd.classpath" />

  <mkdir dir="${report.dir}/pmd" />

 <!--  소스코드를 검사할 PMD 규칙이 설정된 파일 지정  -->

 <pmd rulesetfiles="rulesets/basic.xml">

 <!--   분석결과 파일 저장 위치 지정   -->

  <ruleset>basic</ruleset>

  <formatter type="xml" toFile="${report.dir}/pmd/pmd_report.xml" />

 <fileset dir="${src.dir}">

  <include name="**/*.java" />

  </fileset>

  </pmd>

  </target>

</project>

프로젝트의 설정에서 Post-build Actions Publish JUnit test result report , Publish PMD analysis results 에 앞서 지정한 결과파일위치를 설정해주면 결과를 Jenkins를 통해 확인 할 수 있다.

'0x01 Programming > 0x0ff Etc' 카테고리의 다른 글

각 프로그램이 사용하는 포트 알아내기  (0) 2013.05.14
NoSQL에 대한 설명  (0) 2013.02.05