CruiseControl.NET

    1. IIS 및 ASP.NET(.NET Framework 2.0 이상) 설치 : CruiseControl.NET의 Web DashBoard 사용을 위해 필요.

        http://www.microsoft.com/downloads/ko-kr/details.aspx?displaylang=ko&familyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5
에서 dotnetfx.exe 다운로드 및 설치
*참고 : .NET Framework 설치 확인방법
방법 1) 프로그램 추가 제거에서 확인
방법 2) c:\windows\microsoft.net\framework 폴더에서 하위 폴더 이름(v4.0)으로 확인
방법 3) 레지스트리 HKLM\Software\Microsoft\.NETFramework 에서 확인

    2. CruiseControl.Net 설치 : http://sourceforge.net/projects/ccnet/

        CruiseControl.NET-1.6.7981.1-Setup.exe 다운로드 및 설치

 

    3. 실행방법

        C:\Program Files\CruiseControl.NET\server\ccnet.exe 파일을 직접 실행시키거나

        CruiseControl.NET 서비스의 "속성 > 로그온"에서 계정 지정에 Administrator 계정의 ID/Password 지정하여

        서비스로 구동시킵니다.

 

    4. 외부에서 접속시 방화벽 관련 포트

        80 port        : webdashboard 접속을 위해 열어둘 포트 (IIS)

        21234 port     : CCTray가 다른 컴퓨터에 설치되어 접속할때 열어둘 포트
CCTray

    CruiseControl.Net 클라이언트 프로그램

http://sourceforge.net/projects/ccnet/files/CruiseControl.NET%20Releases/ 에서

CruiseControl.NET-CCTray-1.6.7981.1-Setup.exe 다운로드 및 설치

 

    방화벽 관련

CCTray는 CruiseControl.NET 서버의 21234 port를 통해 접속함.



CruiseControl.NET 설정

    CruiseControl.Net 서버 설정 파일 : C:\Program Files\CruiseControl.NET\server\ccnet.config

        초기 설치시]

<cruisecontrol xmlns:cb="urn:ccnet.config.builder">

            <!-- This is your CruiseControl.NET Server Configuration file. Add your projects below! -->

            <!--

                <project name="MyFirstProject" />

            -->

</cruisecontrol>

 

        Ex]

        <cruisecontrol>

            <project name="hello"></project>        <!-- 각 프로젝트 설정 -->

            <project name="world "></project>

        </cruisecontrol>

 

    <labeller> : 빌드 넘버 표시 방식을 지정하는 태그

        type 속성의 값은 대소문자를 구분 합니다.

 

        Ex] type = defaultlabeller

        <project>        <!-- labeller는 <project></project> 안에 위치함 -->

            <labeller type="defaultlabeller">    <!-- defaultlabeller의 labeller의 첫 l은 소문자 표기 필수 -->

                <prefix>1.0.</prefix>        <!-- prefix 생략 가능>

                <incrementOnFailure>true</incrementOnFailuer>    <!-- 기본값 false이며 true인 경우 빌드 실패시에도 빌드 넘버 증가-->

            </labeller>

        </project>

 

        Ex] type = dateLabeller : 날짜를 빌드 넘버로 사용 (2007.8.5.1 : 2007년 8월 5일 1번째 빌드)

        <project>

            <labeller type="dateLabeller" />

        </project>

 

        Ex] type = fileLabeller : 파일에 빌드 넘버 저장하고 사용하며 빌드 넘버를 변하지 않고 파일에 저장된 빌드 넘버를 변경해야 적용됨.

        <project>

            <labeller type="fileLabeller">

                <!-- version.txt 내용 예 : 678 또는 1.1 또는 alpha, beta 가능 -->

                <labelFilePath>C:\build\version.txt</labelFilePath>    <!-- 필수 -->

                <allowDupllicateSubsequentLabels>true</allowDuplicateSubsequentLabels>

                <prefix>1.0.</prefix>        <!-- 생략 가능 -->

            </labeller>

        </project>

        

        Ex] type = iterationLabeller : 빌드 넘버 증가 방식은 defaultlabeller와 동일

        <project>

            <labeller type="iterationLabeller">

                <prefix>1.0.</prefix>        <!-- 생략 가능 -->

                <duration>1</duration>    <!-- 생략가능. 몇주를 1주일로 볼건지 지정. 기본값 2 -->

                <releaseStartDate>2007/10/01</releaseStartDate>    <!-- 필수. 프로젝트의 릴리즈 날짜 -->

                <separator>.</separator>    <!-- 생략 가능. 기본값 . -->

            </labeller>

        </project>

        <!--

            <releaseStartDate>가 2007/10/01, <duration>이 1, 오늘날짜(빌드한 날짜)가 2007/10/16 이면

            2주가 지났으며 <duration> 이 1이므로 2가 되어 1.0.2.1 이 됨. (prefix.2.buildnumber)

            <duration>이 5이고 10주가 지났다면 2가 됨.

        -->

 

        Ex] type = remoteProjectLabeller : 다른곳의 CruiseControl.NET과 연동하는 방식

192.168.0.100의 CruiseControl.NET이 실행되고 있고, sample 프로젝트가 1.0.1로 빌드되었다면 1.0.1을 그대로 가져와 사용

        <project>

            <labeller type="remoteProjectLabeller">

                <project>sample</project>

                <!-- 현재 CruiseControl.NET에서 빌드된 프로젝트 빌드 넘버를 가져옴 -->

                <serverUri>tcp://192.168.0.100:21234/CruiseManager.rem</serverUri>

            </labeller>

        </project>

 

        Ex] type = stateFileLabeller : 현재 CruiseControl.NET에서 빌드되고 있는 다른 프로젝트의 빌드 넘버를 가져옴

            각 프로젝트 빌드 넘버는 C:\Program Files\CruiseControl.NET\server 아래에 "프로젝트명.state"로 저장 되어 있음.

        <project>

            <labeller type="stateFileLabeller">

                <project>sample</project>    <!-- sample 프로젝트의 빌드 넘버를 가져옴 -->

            </labeller>

        </project>

 

    <sourcecontrol> : Subversion, CVS, Perforce, Visual Sourcesafe 등에서 빌드시 마다 소스를 자동으로 업데이트 가능.

        <sourcecontrol type="svn">        <!-- svn과 연동-->

            <trunkUrl>svn://192.168.0.100/example/trunk</trunkUrl>    <!-- 소스를 업데이트 받을 저장소. branch도 지정 가능 -->

            <workingDirectory>C:\build\example</workingDirectory>    <!-- 소스 체크아웃할 경로 -->

 

            <!-- 기타설정 : svn.exe 경로 직접 지정시 사용. 보통 Path 환경변수에 등록하여 사용 -->

            <executable>c:\apps\svn.exe</executable>

 

            <!-- 기타설정 : svn 접속 계정 및 암호 -->

            <username>sampleuser</username>

            <password>1234</password>

 

            <!-- 기타설정 : 빌드시 소스 자동 업데이트 지정. 기본값 true -->

            <autoGetSource>true</autoGetSource>

 

            <!-- 기타설정 : 빌드 성공시 태깅 사용 여부 및 태깅할 svn 주소 지정 -->

            <!-- 아래 예는 빌드 넘버가 1.0.1이라면 svn://192.168.0.100/example/tags/1.0.1에 trunk가 태그 됨-->

            <tagOnSuccess>true</tagOnSuccess>    

            <tagBaseUrl>svn://192.168.0.100/example/tags</tagBaseUrl>

 

            <!-- 지정한 시간 동안 svn.exe 명령 실패시 빌드 실패로 지정. 기본값 10분. units 미지정시 밀리초(ms)로 계산 -->

            <timeout>60000</timeout>

            <timeout units="millis">60000</timeout>

            <timeout units="secondes">60</timeout>

            <timeout units="minutes">5</timeout>

            <timeout units="hours">1</timeout>

 

        </sourcecontrol>

 

    <tasks> : 실제 소스 컴파일 설정 지정. vs 6, vs 2005, MSBuild 등 도구 사용 설정 혹은 특정 프로그램 실행 가능.

        [Visual Studio 2005인 경우]

        <tasks>

            <devevn>

                <solutionfile>C:\build\example\exaple.sln</solutionfile>    <!-- 솔루션 파일 지정 -->

                <configuration>Release</configuration>    <!-- Release 혹은 Debug 지정 -->

 

                <!-- 기타 설정 -->

                <buildtype>build</buildtype>    <!-- 빌드 형식 지정(build, rebuild, clean). 기본값 rebuild -->

                <project>sample</project>    <!-- 솔루션의 특정 빌드만 빌드. 미지정시 모든 프로젝트 빌드 -->

 

                <!-- vs2002 혹은 vs2003으로 빌드 할 수 있도록 설정 -->

                <executable>c:\Program Files\Microsoft Visual Studio.NET\Common7\IDE\devenv.com</executable>

 

                <buildTimeoutSeconds>600</buildTimeoutSeconds>    <!-- 지정시간동안 컴파일 미완료시 빌드 실패 처리. 기본값 10분 -->

            </devenv>

            <!-- vs 6인 경우 <devenv> 대신 <exec> 사용

            <exec>

                <executable>"c:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin\MSDEV.COM"</executable>

                <baseDirectory>C:\build\example</baseDirectory>

                <buildArgs>c:\build\example\example.dsw /MAKE "EXAMPLE - Win32 Release" /REBUILD</buildArgs>

            </exec>

            -->

        </tasks>

 

        [VCBuild 인 경우]

         VCBuild : vs2005 부터 제공되는 빌드 도구로 <exec> 사용하여 설정

            <executable> : vcbuild.exe 경로 지정

            <baseDirectory> : 빌드할 소스 코드 경로 지정

            <buildArgs> : 빌드 옵션, 솔루션(혹은 프로젝트) 파일 경로, Realse/Debug 모드 설정, Win32/x64 설정

 

        <tasks>

            <exec>

                <excutable>"C:\Program Files\Microsoft Visual Studio 8\VC\vcpackages\vcbuild.exe"</executable>

                <baseDirectory>C:\build\example</baseDirectory>

                <buildArgs>/rebuild C:\build\example\example.sln "Release|Win32"</buildArgs>

            </exec>

        </tasks>

 

        [tip. /MP 옵션 설정시 멀티 프로세스로 컴파일]

            Ex) /rebuild /MP C:\buld\example\example.sln "Release|Win32"

            참조 : http://msdn.microsoft.com/ko-kr/library/bb385193.aspx

 

        [tip. 64 bit, Debug 빌드]

            <devenv>는 Release, Debug 모드 구분 가능하지만 32 bit, 64 bit 빌드 구분 불가능.

            <devenv>에서 64 bit 빌드하려면 프로젝트 설정에서 Win32 플랫폼 삭제하여 x64만 남겨두어야 함.

            VCbuild는 Release/Debug, 32 bit/64 bit 을 구분 하여 빌드 가능.

            Ex) "Debug|Win32"    : 32bit Debug

            Ex) "Release|x64"    : 64bit Release

 

        [MSBuild]

        MSBuild : vs2005에서 제공해주는 또 다른 빌드 도구 (사용방법 생략)

 

        [Executable]

            <exec> 태그로 콘솔 형식의 외부 프로그램 실행

        <tasks>    <!-- 사용 예 1 -->

            <exec excutable = "C:\example\build.cm" />

        </tasks>

 

        <tasks>    <!-- 사용 예 2 -->

            <exec>

                <excutable>build.cmd</executable>            <!-- 실행할 파일 지정 -->

                <baseDirectory>C:\build\example</baseDirectory>    <!-- 실행파일을 실행할 디렉토리 지정 -->

                <buildArgs>all</buildArgs>                <!-- 실행파일에 전달할 입력값 지정 -->

                <buildTimeoutSeconds>10</buildTimeoutSeconds>

            </exec>

        </tasks>

 

        [Build Publisher]

            <buildpublisher> 태그는 빌드 완료 후 결과물을 특정 디렉토리에 복사해주는 기능 제공.

        <buildpublisher>

            <sourceDir>C:\build\example\release</sourceDir>        <!-- 빌드 완료 후 결과물이 생길 디렉토리 지정 -->

            <publishDir>\\fileserver\example</publishDir>        <!-- 특정 공유 폴더에 복사 지정 -->

            <useLabelSubDirectory>false</useLabelSubDirectory>        <!-- true : publishDir 아래에 빌드 넘버의 이름으로 디렉토리 생성 후 결과물을 복사 -->

                                            <!-- false : publishDir 디렉토리 아래에 계속 덮어씀 -->

                                            <!-- 기본값 : false -->

        </buildpublisher>

 

    Trigger : 빌드 주기를 지정. <scheduleTrigger>, <intervalTrigger>, <projectTrigger>, <urlTrigger>, <filterTrigger>

        <!-- scheduleTrigger : 특정 주기로 빌드

Ex) 매주 월요일 20시에 빌드 시작 -->

        <scheduleTrigger time="20:00" buildCondition="ForceBuild" name="Scheduled">

            <!-- buildCondition    = IfModificationExists : 저장소에 변경사항 있는 경우에만 빌드 수행. 기본값

                        = ForceBuild : 무조건 빌드 수행    -->

            <weekDays>        <!-- 빌드할 요일 지정. 미지정시 매일 빌드 수행 -->

                <weekDay>Monday</weekDay>

            </weekDays>

        </scheduleTrigger>

 

        <!-- intervalTrigger : 지정된 시간마다 반복적으로 빌드 수행.

Ex) 30초마다 무조건 빌드 -->

<intervalTrigger name="continuous" seconds="30" buildCondition="ForceBuild" />

 

        <!-- projectTrigger : 다른 곳의 CruiseControl.NET의 특정 프로젝트 빌드 완료시 빌드 시작 지정 -->

        <projectTrigger serverUri="tcp://192.168.0.100:21234/CruiseManager.rem" project="sample">    <!-- serverUri로 다른 곳의 CruiseControl.NET 주소 지정 -->

            <triggerStatus>Success</triggerStatus>    <!--    Success : 원격지 프로젝트 빌드 성공시 빌드 시작. 기본값

                                        Failure : 원격지 프로젝트 빌드 실패시 빌드 시작

                                        Exception : 원격지 프로젝트 빌드가 실패하지 않았지만 다른 부분에서 실패시 빌드 시작

                                    -->

            <innerTrigger type="intervalTrigger" seconds="30" buildCondition="ForceBuild" />    <!-- 지정한 시간 간격으로 원격지 프로젝트의 빌드 결과 검사 -->

        </projectTrigger>

 

        [tip. Success, Failure, Exception 확인 방법 : <projectTrigger> 관련]

        CCTray에서 프로젝트의 상태가 아이콘으로 표시되지만

        더 자세한 정보는 "C:\Program Files\CruiseControl.NET\server\프로젝트명.state" 파일의

<Status>와 <LastIntegrationStatus> 에 빌드 상태에 따라 Success, Failure, Exception 표시 됨.

<Status>는 현재 상태를 의미.

<LastIntegrationStatus>는 마지막 상태를 의미. (현재 빌드의 바로 직전 상태)

 

<!-- uriTrigger : 특정 URL 웹페이지 변경시 빌드 시작하며 지정한 시간 주기로 웹페이지 변경 검사 -->

<uriTrigger url="http://192.168.0.200/page.html" seconds="30" buildCondition="ForceBuild">

 

        <!-- filterTrigger : 지정된 시간안에 하위 트리거의 실행 여부 제어

            Ex) 매주 일요일 60초마다 빌드하지만 22시에서 23시 사이엔 빌드 하지 않음을 지정 -->

        <filterTrigger startTime="22:00" endTime="23:00">

            <trigger type="intervalTrigger" seconds="60" />

            <weekDays>

                <weekDay>Sunday</weekDay>

            </weekDays>

        </filterTrigger>

 

        [tip. 설정파일의 주석 등에 한글 사용시]

        1. ccnet.config 첫째줄에 encoding 속성을 UTF-8로 설정

        2. 설정파일에 <?xml version="1.0" encoding="utf-8"?> 지정 미치 UTF-8로 저장

 

 

빌드 자동화 실습

    1. SVN Checkout : D:\test\svn_client\trunk\console

    2. C:\Program Files\CruiseControl.NET\server\ccnet.config 수정

<cruisecontrol xmlns:cb="urn:ccnet.config.builder">

    <project name="consoleProject">

        <labeller type="defaultlabeller">

            <prefix>1.0.</prefix>

        </labeller>

        

        <sourcecontrol type="svn">

            <trunkUrl>svn://127.0.0.1:3690/svn/trunk/console</trunkUrl>

            <workingDirectory>D:\test\svn_client\trunk\console</workingDirectory>

        </sourcecontrol>

        

        <triggers>

            <scheduleTrigger time="20:00" buildCondition="ForceBuild" name="Scheduled" />

        </triggers>

        

        <tasks>

            <devenv>

                <solutionfile>D:\test\svn_client\trunk\console\console.sln</solutionfile>

                <configuration>Release</configuration>

            </devenv>

        </tasks>

    </project>

</cruisecontrol>

 

    3. C:\Program Files\CruiseControl.NET\server\ccnet.exe 실행

    4. C:\Program Files\CCTray\cctray.exe 실행

        "File > Settings.. > Build Projects" 에서 "Add..." > "Add Server" 에서 서버 추가 후 "Available Projects" 선택

    5. CCTray기능 사용

Force Build 버튼으로 강제 빌드 명령 가능

webdashboard 연결

 

 

Webdashboard가 정상적으로 나오지 않을 경우.

    Windows Vista, Windows7 이나 IIS 7 에선 설정방법 변경으로 CruisControl.NET 설치시

webdashboard가 정상적 설정되지 않습니다.

 

    다음 부분을 확인하고 설정해줘야 하며 windows 7, IIS 7.5 기준의 설명입니다.

 

    1. ASP.NET(.NET Framework 2.0 이상) 설치 확인

        설치가 안되어있다면 다음 주소에서 다운받아 설치

        http://www.microsoft.com/downloads/ko-kr/details.aspx?displaylang=ko&familyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5

 

    2. IIS에서 ASP.NET 사용 설정

        "제어판 > 프로그램 제거 또는 변경 > Windows 기능 사용/사용 안함" 에서

        "인터넷 정보 서비스 > World Wide Web 서비스 > 응용 프로그램 개발 기능" 에서 ASP.NET 체크

        (Windows XP에선 "C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i" 를 통해 등록할 수 있습니다.

        Windows7에선 저 명령을 안써봐서 모르겠습니다.)

    3. "관리 도구 > IIS(인터넷 정보 서비스) 관리자" 설정

        "Default Web Site" 오른쪽 마우스 메뉴에서 "응용 프로그램 추가"

별칭 : ccnet

응용 프로그램 풀 : DefaultAppPool

실제 경로 : C:\Program Files\CruiseControl.NET\webdashboard

        **. 잘 안될 경우 " Classic .NET AppPool " 라는 이름으로 응용 프로그램 풀을 만들어 지정해 주어야 할 것 같습니다.

        IIS 재시작를 재시작 합니다.

    4. C:\Program Files\CruiseControl.NET\webdashboard\Web.config 파일 설정 확인

        다음 설정이 들어있는지 확인합니다. (CruiseControl.NET-1.6.7981.1-Setup.exe 버전엔 자동으로 설정되어있습니다.)

 

<!-- Enable the handles in IIS 7.0 or later-->

<system.webServer>

<validation validateIntegratedModeConfiguration="false" />

<handlers>

<add verb="*" path="*.aspx" type="ThoughtWorks.CruiseControl.WebDashboard.MVC.ASPNET.HttpHandler,ThoughtWorks.CruiseControl.WebDashboard" name="CCNetHttpHandler"/>

<add verb="*" path="*.xml" type="ThoughtWorks.CruiseControl.WebDashboard.MVC.ASPNET.HttpHandler,ThoughtWorks.CruiseControl.WebDashboard" name="CCNetXmlHandler"/>

</handlers>

</system.webServer>

 

참고 : 빌드서버 구축 - 2008 Server Core + CruiseControl.NET + SVN 설치, 셋팅 http://talsu.net/133

 

Tip 8. 자동빌드 하지 않고 ForceBuild만 사용시

    ccnet.config 파일에서 <triggers /> 로 설정하면 자동빌드 안함.

    **주의. <triggers /> 조차 없을 경우 기본값인 60초마다 소스 변경사항 있을 경우 빌드가 수행 됨.

 
 

'버전관리' 카테고리의 다른 글

svn 리비전 정보 넣기  (0) 2015.04.02
pre-commit.bat svn 공백 메시지 막기  (0) 2013.08.07
doxygen, graphviz, doxycomment  (0) 2012.08.07
Virtual Box 포트 포워딩(port forwarding)  (0) 2012.03.02
moinmoin wiki 설치  (0) 2011.06.11
CI (continuous integration)  (0) 2011.02.13