'CI'에 해당되는 글 3건

  1. 2013.08.26 Ant 를 이용한 빌드 by 즐건세상
  2. 2013.08.26 젠킨스 overview by 즐건세상
  3. 2008.12.27 개발 환경 자동화 by 즐건세상

Ant 를 이용한 빌드

IT/ASLC 2013. 8. 26. 15:44

1.젠킨스(jenkins) Overview

2.젠킨스(jenkins) 설치

3. 샘플 프로젝트

4. Ant 를 이용한 빌드

5. 젠킨스(jenkins) 시작

샘플 프로젝트를 빌드하고자 한다.

빌드를 하는 가장 간단한 방법은 명령줄(command line)에서 빌드하는 것이다. 

명령줄 빌드

명령줄에서 샘플 프로젝트를 빌드하는 방법은 아래와 같다.



-classpath 컴파일 옵셥은 참조하는 라이브러리 jar 파일들의 목록이 된다. 유닉스에서는 구분자가 세미콜론(:)이 된다.

-d 옵션은 .java 파일들을 빌들한 결과로 나온 클래스 파일들이 저장될 경로가 된다.


Ant를 이용한 빌드

명령줄 빌드는 빌드를 자주 실행할 수가 없다. 빌드를 한번 실행해보기 위해서는 너무 많은 노력이 들어가게 된다. 뭔가 잘못입력한다면 빌드 스크립트를 처음부터 다시 입력해야 한다. Ant를 이용하면 보다 쉽게, 자주 빌드를 실행 할 수가 있다.

Ant를 이용한 빌드 스크립트 작성하기

□  프로젝트 정의하기

<?xml version="1.0" encoding="UTF-8"?>
<project name="LectureService" default="compile" basedir=".">

□  재료 정의하기

프로젝트 디렉토리에 프로퍼티를 정의하여 앤트에 프로젝트 디렉토리 구조를 알려준다.

<property name="build.dir" location="bin"></property>
<property name="build.prod.dir" location="${build.dir}/prod"></property>
<property name="build.test.dir" location="${build.dir}/test"></property>
<property name="src.dir" location="src"></property>
<property name="test.dir" location="test"></property>
<property name="lib.dir" location="lib"></property>
<property name="test.reports" location="testReports"></property>

프로젝트 경로는 상대경로로 지정하여 경로가 변경되더라도 수정없이 사용할 수 있도록 한다.

□  클래스 패스 정의하기

pathelement 엘리먼트에 빌드 디렉토리 두 개를 추가해서 자바 컴파일러가 모든 클래스 파일들을 찾아낼 수 있게 한다.

fileset 엘리먼트에 필요한 라이브러리가 들어 있는 경로를 추가한다.

<path id="project.classpath">
    <pathelement location="${build.prod.dir}"></pathelement>
    <pathelement location="${build.test.dir}"></pathelement>
    <fileset dir="${lib.dir}">
        <include name="*.jar"></include>
    </fileset>
</path>

컴파일 작성하기

target의 실행 순서를 지정 할 수 있다. depends 속성의 값을 prepare 타깃을 실행한 다음 compile 타깃을 실행하게 설정 할 수 있다.

<target name="prepare">
        <mkdir dir="${build.prod.dir}"></mkdir>
        <mkdir dir="${build.test.dir}"></mkdir>
        <mkdir dir="${test.reports}"></mkdir>
</target>


<target name="compile" depends="prepare">
    <javac srcdir="${src.dir}" destdir="${build.prod.dir}">
        <classpath refid="project.classpath"></classpath>
    </javac>
</target>

prepare 타깃을 실행하고 나면 <javac 타스크를 실행하게 된다. 자바 컴파일러는 srcdir 속성의 값이 가리키는 폴더의 소스코드들을 컴파일하고, 생성된 클래스 파일들을 destdir 속성의 값에 해당하는 경로에 저장한다. classpath는 앞에서 정의한 값을 재사용 할 수 있다.


junit 스크립트 작성하기

지금까지 컴파일 타깃을 작성하는 것에 대해서 살펴 봤고, 이번에는 junit 스크립트를 작성하는 방법에 대해서 알아보고자 한다.

컴파일 순서를 compile-tests 를 먼저 실행하고 test 타깃을 수행한다.

junit  haltonfailure 속성을 true로 설정하면 테스트가 하나라도 실패하면 빌드가 실패하도록 한다.

classpath는 앞에서 정의한 클래스 패스를 재사용 한다.

테스트 결과보고를 어떻게 보여주느냐에 대한 설정으로 formatter 엘리먼트를 이용한다. formatter 엘리먼트의 type 속성의 값은 brief, plain, xml로 설정 할 수 있다.

brief : 실행되는 테스트 케이스의 이름과 통계, 세부 정보들을 테스트가 실패할 때만 출력할 경우 사용

plain : brief 보다 더 많은 정보를 출력 할 경우 사용

xml : 출력 결과를 xml 형식으로 출력 할 경우 사용

usefile 속성 값을 false로 정의하면 테스트 결과를 파일에 출력하지 않고 화면에 출력한다.

batchtest 태스크 안에 fileset 엘리먼트를 이용해서 작성된 테스트 케이스를 한꺼번에 실행 할 수 있다.

batchtest 엘리먼트의 todir 속성의 값으로 테스트 실행결과 파일이 생성될 위치 경로를 지정 할 수 있다.

앞에서 정의 한 <formatter 엘리먼트의 형식으로 리포트가 생성된다.

<target name="test" depends="compile-tests">
        <junit haltonfailure="true">
            <classpath refid="project.classpath"></classpath>
            <formatter type="xml"></formatter>
            <formatter type="brief" usefile="false"/>
            <batchtest todir="${test.reports}">
                <fileset dir="${build.test.dir}" includes="**/*Test.class"></fileset>
            </batchtest>
            <sysproperty key="doc.dir" value="${doc.dir}"></sysproperty>
            <sysproperty key="index.dir" value="${index.dir}"></sysproperty>
        </junit>       
    </target>

ant 실행하기

명령줄에서 실행할 때는 다음과 같이 실행 할 수 있다.



이클립스 플러그인을 이용해서 ant 실행하기

이클립스 ant view 실행하기

Windows - Show View - ant view 실행



처음 Ant view 를 실행하면 아무것도 보이지 않는다.  위 그림에서 1번 사각형의 아이콘을 클릭해서 build.xml을 추가해 주면 된다.

Ant view 에서는 빌드 스크립트에 정의 되어 있는 target 을 볼 수 있다. 타겟을 선택한 다음 2번 사각형의 아이콘을 클릭하면 타깃을 실행 할 수 있다.


완성된 빌드 파일을 첨부했다.

build.xml




Posted by 즐건세상
l

젠킨스 overview

IT/ASLC 2013. 8. 26. 11:48

1.젠킨스(jenkins) Overview

2.젠킨스(jenkins) 설치

3. 샘플 프로젝트

4. Ant 를 이용한 빌드

5. 젠킨스(jenkins) 시작


What is Jenkins?
젠킨스는 소프트웨어 프로젝트 빌딩하는 작업 또는 크론(cron)에 의해서 실행되는 작업 같은 반복되는 작업들의 실행을 모니터링하는 어플리케이션이다.

소프트웨어 프로젝트의 빌딩/테스팅은 지속적이어야 한다.

젠킨스는 사용하기 쉬운 CI(Continuous Integration) 시스템을 제공한다. 젠킨스는 개발자들이 프로젝트의 변화를 통합하는 작업을 더 쉽게 만들어준다. 젠킨스는 사용자들의 최신의 빌드를 얻는데 더 쉽게 만들어 준다. 자동화되고, 지속적인 빌드는 생산성을 증가시켜 준다.

외부에서 실행되는 작업이나, 크론(cron) 같은 작업들과 프락메일(procmail) 작업들, 심지어 원격 머신도 모니터링을 실행한다. 예를 들어, 크론의 작업 결과를 정기적인 이메일로 받고,  당신은 이메일을 부지런히 주시하고, 뭔가 잘못됐을 때 알림을 받게 된다.

젠킨스는 이러한 결과들을 유지시켜주고, 뭔가 잘못됐을 때 알림을 받기 쉽게 해준다.

■ Features

1.쉬운 설치

java -jar jenkins.war 명령을 실행 또는,

서블릿 컨테이너에 jenkins.war 파일을 디플로이(deploy)

더  이상 추가적인 인스톨이나 데이터베이스는 없다.

2. 쉬운 설정

젠킨스는 즉각적인 에러 확이과 인라인 도움말 기능을 갖춘 친숙한 웹 GUI 설정 환경을 젠킨스의 모든  설정에서 사용할 수 있다. 젠킨스는 더이상의 XML 이 필요없긴 하지만, 당신이 원하면 그렇게 할 수도 있다.

3. 변경 집합(set) 지원

젠킨스는 서브버전(Subversion)이나, CVS로부터 체크아웃을 소스 코드를 받아 온다. Repository의 부하를 줄이기 위해 변경된 부분만 받아온다.

4. 영구 링크
Permanent links: Jenkins gives you clean readable URLs for most of its pages, including some permalinks like "latest build"/"latest successful build", so that they can be easily linked from elsewhere.

5. RSS/E-mail/IM 통합

빌드에 대한 결과를 실시간으로 RSS 또는 e-mail로 모니터링 할 수 있다.

6. After-the-fact tagging
 Builds can be tagged long after builds are completed.

7. JUnit/TestNG 테스트 보고

젠킨스는 테스트 결과를 테이블 형태, 요약, 테스트가 언제 실패했는지와 같은 히스토리 정보도 보여준다. 히스토리 경향을 그래프로 보여준다.

8. 분산 빌드

젠킨스는 여러대의 컴퓨터에서 분산 빌드/테스트를 실행 할 수 있다.

Distributed builds: Jenkins can distribute build/test loads to multiple computers. This lets you get the most out of those idle workstations sitting beneath developers' desks.

9. File fingerprinting

Jenkins can keep track of which build produced which jars, and which build is using which version of jars, and so on. This works even for jars that are produced outside Jenkins, and is ideal for projects to track dependency.
Plugin Support: Jenkins can be extended via 3rd party plugins. You can write plugins to make Jenkins support tools/processes that your team uses.

Posted by 즐건세상
l

개발 환경 자동화

IT/ASLC 2008. 12. 27. 11:29
ci 에 대한 자료를 찾다가 글을 쓰기에는 아직 지식이 부족한거 같고
관련 툴들만 적어봅니다.

■ 소스 코드 관리

 - subversion, cvs
<span style="font-size: 9pt;">슬라이드 2</span>
issue 관리 시스템
 - trac, mantis, bugzilla, jira
<span style="font-size: 9pt;"><span style="font-size: 9pt;">슬라이드 2</span></span>
자동 빌드 시스템
 - crusie control, hudson, team city
쉬운 deploy
  - junit, cactus, JUnitEE
테스트 커버리지
 - Cobertura, EMMA
 
■ code inspection
 - check style, findbug, pmd
※ 참고 사이트
 -  보다 자세한 내용은 아래 사이트를 참고하세요

http://bcho.tistory.com/
http://www.ibm.com/developerworks/kr/library/j-ap01117/index.html
http://okjsp.tistory.com/tag/ci
http://www.pyrasis.com/main/
http://martinfowler.com/articles/continuousIntegration.html
http://agile.egloos.com/

슬라이드 12
* 현재 프로젝트에서 개선이 필요한 부분
 - 수정 사항을 운영 서버로 반영하기 위한 부분 자동화가 필요
   -> folder 생성 프로그램과 ftpclient 프로그램으로 해결
 - 로깅 시스템 개선
  -> 로그 레벨 조정
  -> error 레벨이 발생했을 경우 관리자로 email전송
  -> 업무별 로그 파일 분리
 - 디버깅 환경
  -> cactus를 이용한  j2ee 에서 디버깅 환경 구성


Posted by 즐건세상
l